函数参数

函数参数的语法图如下所示:

函数参数的语法图
parameterName
指定参数的名称,该参数可以是记录或数据项;也可以是记录或数据项的数组。有关规则,请参阅命名约定

如果指定修饰符 inOutout,对参数值所作的所有更改将体现在调用函数中。这些修饰符稍后将会在 inOut 及相关修饰符的含义中描述。

对参数所作的更改将体现在接收函数调用的函数中,但仅当该参数做为自变量传送才会如此。

以方括号([ ])结尾的参数是动态数组,其它说明声明了该数组每个元素的特征。

inOut
该函数接收自变量值作为输入,而调用程序在该函数结束时接收对该参数所作的所有更改。但是,如果自变量是文字或常量,在处理该自变量时会认为是修饰符 in 在起作用。

如果参数是某个项并且指定了修饰符 field(这指示该参数具有可测试的表单字段属性,如 blanksnumeric),则 inOut 修饰符是必需的。

如果参数是记录,则下列规则适用:
  • 如果打算使用该记录访问当前函数(或当前函数调用的函数)中的文件或数据库,则必须指定 inOut 修饰符或接受缺省的修饰符。
  • 如果记录的类型对于自变量和参数是相同的(例如,如果都是串行记录),则函数中会有特定于记录的状态信息(如文件结束状态)并返回给调用程序,但仅当 inOut 修饰符起作用时才会如此
in
该函数接收自变量值作为输入,而调用程序不受对该参数所作的更改的影响。

不能对已具有修饰符 field 的项使用修饰符 in。而且不能对用于访问当前函数或当前函数调用的函数中的文件或数据库的记录指定 in 修饰符。

out
该函数不会将自变量值接收为输入;而是根据数据初始化中描述的规则对输入值进行初始化。调用程序受对参数所作更改的影响。

如果自变量是文字或常量,在处理该自变量时会认为是修饰符 in 在起作用。

不能对已具有修饰符 field 的项使用修饰符 out。而且不能对用于访问当前函数或当前函数调用的函数中的文件或数据库的记录指定 out 修饰符。

recordPartName
对函数可见并且作为参数的 typeDef(格式模型)的记录部件。有关哪些部件为可见部件的详细信息,请参阅对部件的引用
下列情况适用于对指定的记录进行的输入或输出(I/O):
  • 从同一程序中的另一函数传递的记录包括记录状态,如 I/O 错误值 endOfFile,但是仅当记录与参数具有相同记录类型时才如此。同样,记录状态的任何更改都将被返回给调用程序,所以,如果对记录参数执行 I/O,则可以在当前函数、调用程序或者由当前函数调用的函数中对该记录进行任何测试。

    库函数不接收记录状态。

  • 对记录执行的任何 I/O 操作都使用对参数指定的记录属性而不是对自变量指定的记录属性。
  • 对于 indexedRecord、mqRecord、relativeRecord 或 serialRecord 类型的记录,与记录声明相关联的文件或消息队列被视为运行单元资源而不是程序资源。每当记录属性 fileName(或 queueName)具有相同的值时,本地记录声明就共享同一个文件(或队列)。无论在运行单元中有多少个记录与文件或队列相关联,每次都仅有一个物理文件可以与文件或队列名相关联,并且,EGL 在适当情况下可以通过关闭并重新打开文件来确保此规则的实施。
dataItemPartName
对函数可见并且作为参数的 typeDef(格式模型)的 dataItem 部件。
primitiveType
参数的基本类型在同名主题中作了描述。
length
参数的长度,它是一个整数,表示 parameterName 引用的内存区域中的字符或数字的数量。
decimals
对于某些数字类型,可以指定 decimals,它是用来表示小数点后的位数的整数。最大小数位数是以下两个数字中较小的那一个:18 或声明为 length 的位数。小数点不与数据存储在一起。
"dateTimeMask"
对于类型为 TIMESTAMP 和 INTERVAL 的项,可指定“dateTimeMask”,它会赋予项值中的给定位置特别的意义(如“年份位”)。掩码不会与数据存储在一起。
looseType
松散类型是一种特殊的基本类型,它仅用于函数参数。如果希望参数接受某个范围的自变量长度,则使用此类型。这样做的好处是可以重复地调用函数并且每次都可以传递长度不同的自变量。
有效值如下所示:
  • CHAR
  • DBCHAR
  • HEX
  • MBCHAR
  • NUMBER
  • UNICODE

如果希望参数接受具有任何基本类型和长度的数字,则指定 NUMBER 作为松散类型。在这种情况下,传递给该参数的数字一定不能带有任何小数位。

如果希望参数接受具有特定基本类型但具有任何长度的字符串,则指定 CHAR、DBCHAR、MBCHAR、HEX 或 UNICODE 作为松散类型并确保该自变量具有相应的基本类型。

松散类型不可用在中声明的函数。

有关基本类型的详细信息,请参阅基本类型

field
指示参数具有表单字段属性,如 blanksnumeric。可以在逻辑表达式中测试那些属性。

仅当指定 inOut 修饰符或接受缺省的 inOut 修饰符时,field 修饰符才可用。

field 修饰符对类型为 nativeLibrary 的库中的函数参数不可用。

nullable
指示参数的下列特征:
  • 可以将参数设置为 NULL
  • 该参数能够访问状态信息,该状态信息是对逻辑表达式进行截断或 NULL 测试所必需的
仅当传递给参数的自变量是 SQL 记录中的结构项时,nullable 修饰符才有意义。下列规则适用:
  • 仅当将项属性 isNullable 设置为 yes
  • 无论 isNullable
  • 不管是修饰符 inOutin 还是 out 在起作用,都可以指定 nullable

inOut 及相关修饰符的含义

要更好地理解修饰符 inOutoutin,查看以下示例,它会显示不同变量在不同执行位置的值(用注释表示)。
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
	
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.