Si especifica el modificador inOut o out (como es posible para un parámetro que no está basado en un tipo de referencia), los cambios realizados en el valor del parámetro están disponibles en la función invocadora. Los modificadores se describen posteriormente y en la sección Implicaciones de inOut y los modificadores relacionados. Para obtener detalles acerca de cómo tratar los tipos de referencia, consulte el apartado Variables de referencia y NIL en EGL.
Un parámetro puede pasarse como argumento a otra función. De lo contrario, un parámetro no es visible para las funciones invocadas por la función que lo contiene.
Un parámetro que termina en corchetes ([ ]) es una matriz dinámica, y las demás especificaciones declaran aspectos de cada elemento de esa matriz.
Las funciones de biblioteca no reciben información de estado de registro.
El modificador inOut es necesario si el parámetro es un campo y si especifica el modificador field, lo que indica que el parámetro tiene atributos de campo de formulario con posibilidad de prueba como blanks o numeric.
Al especificar una serie de longitud limitada como parámetro de función cuyo modificador es out, el límite de longitud debe ser el mismo en el argumento y en el parámetro.
Si el modificador inOut está en vigor, el argumento relacionado debe tener compatibilidad de referencia con el parámetro, como se describe en el apartado Compatibilidad de referencia en EGL.
No puede utilizar el modificador in para un campo que tenga el modificador field. Además, no puede especificar el modificador in para un registro que se utilice para acceder a un archivo o una base de datos en la función actual o en una función invocada por la función actual.
Si el argumento es un literal o una constante, el argumento se trata como si el modificador in estuviera en vigor.
No puede utilizar el modificador out para un parámetro que tenga el modificador field. Además, no puede especificar el modificador out para un registro que se utilice para acceder a un archivo o una base de datos en la función actual o en una función invocada por la función actual.
Al especificar una serie de longitud limitada como parámetro de función cuyo modificador es out, el límite de longitud debe ser el mismo en el argumento y en el parámetro.
En un servicio, un parámetro no puede ser de tipo ANY, BLOB ni CLOB.
Si desea que el parámetro acepte un número de cualquier tipo primitivo y longitud, especifique NUMBER como tipo loose. En este caso, el número pasado al parámetro no debe tener posiciones decimales.
Si desea que el parámetro acepte una serie de un tipo primitivo determinado pero cualquier longitud, especifique CHAR, DBCHAR, MBCHAR, HEX o UNICODE como tipo loose y asegúrese de que el argumento es del tipo primitivo correspondiente.
La definición del argumento determina lo que ocurre cuando una sentencia de la función opera sobre un parámetro de tipo loose.
Los tipos loose no están disponibles en funciones declaradas en bibliotecas o servicios.
Para obtener detalles acerca de los tipos primitivos, consulte el apartado Tipos primitivos.
El modificador field solo está disponible si especifica el modificador inOut o acepta el modificador inOut predeterminado.
El modificador field no está disponible para parámetros de función en un servicio o en una biblioteca de tipo nativeLibrary.
Si la función está en un componente de servicio o en un componente de interfaz de tipo basicInterface, solo se aplica el segundo caso porque la opción del descriptor de construcción itemsNullable siempre se establece en no.
program inoutpgm a int; b int; c int; function main() a = 1; b = 1; c = 1; func1(a,b,c); // a = 1 // b = 3 // c = 3 end function func1(x int in, y int out, z int inout) // a = 1 x = 1 // b = 1 y = 0 // c = 1 z = 1 x = 2; y = 2; z = 2; // a = 1 x = 2 // b = 1 y = 2 // c = 2 z = 2 func2(); func3(x, y, z); // a = 1 x = 2 // b = 1 y = 3 // c = 3 z = 3 end function func2() // a = 1 // b = 1 // c = 2 end function func3(q int in, r int out, s int inout) // a = 1 x = unresolved q = 2 // b = 1 y = unresolved r = 2 // c = 2 z = unresolved s = 2 q = 3; r = 3; s = 3; // a = 1 x = unresolved q = 3 // b = 1 y = unresolved r = 3 // c = 3 z = unresolved s = 3 end
Conceptos relacionados
Componente de función
Componente de biblioteca de tipo basicLibrary
Componente de biblioteca de tipo nativeLibrary
Componentes
Referencias a componentes
Referencias a variables en EGL
Typedef
Consulta relacionada
Componente de registro básico en formato fuente EGL
Inicialización de datos
Formato fuente EGL
Componente de función en formato fuente EGL
Componente de registro indexado en formato fuente EGL
INTERVAL
Expresiones lógicas
Componente de registro MQ en formato fuente EGL
Convenios de denominación
Tipos primitivos
Compatibilidad de referencia en EGL
Variables de referencia y NIL en EGL
Componente de registro relativo en formato fuente EGL
Componente de registro serie en formato fuente EGL
Componente de registro SQL en formato fuente EGL
TIMESTAMP