我是PeopleCode的新手,在学习函数的过程中,我注意到在PeopleCode中,我们通常使用%PATIENT_ID传递值,一个朋友告诉我在PeopleCode中也可以通过引用传递,但是怎么传递呢?
发布于 2016-10-20 02:59:30
对于函数,PeopleCode通过引用传递。
Function addOne(&num As integer)
&num = &num + 1
End-Function;
Local integer &val = 9;
addOne(&val);
MessageBox(0, "", 0, 0,String(&val));10个结果
如果您使用的是App类,那么它对于方法的行为是不同的:
简单类型(字符串、整数、数字等)的
method addOne(&num as integer out)
发布于 2017-01-03 10:13:08
在与执行代码相同的上下文中定义的函数,例如页面/组件/记录/字段事件PeopleCode,总是将参数视为引用。
在应用程序类中,方法上的简单类型的参数可以使用'out‘关键字来定义,以声明它们是一个引用。方法还自动将参数作为复杂类型的引用进行传递。想一想:“如果有很多数据,它就是一个参考。”
发布于 2017-01-27 08:47:20
本文档将对您非常有帮助。https://docs.oracle.com/cd/E26239_01/pt851h3/eng/psbooks/tpcr/chapter.htm?File=tpcr/htm/tpcr07.htm
使用对象数据类型传递参数的
具有对象数据类型的参数始终通过引用传递:
通过引用传递的/*参数*/方法storeInfo(&f作为文件);
如果为具有object数据类型的方法参数指定out修饰符,则它将成为引用参数。这意味着参数变量是通过引用传递的,而不是传递时它所指向的对象。
例如,如果使用out修饰符传递对象参数:
方法myMethod(&arg as MyObjectClass);本地方法&o1 =创建MyObjectClass("A");本地MyOtherObjectClass &o2 =创建MyOtherObjectClass();&o2.myMethod(&o1);并且在myMethod内部发生这种情况:方法myMethod &arg =创建MyObjectClass("B");结束方法;
由于方法参数是在myMethod的主体内重新分配的,因此&o1在方法调用完成后不会指向MyObjectClass的新实例(用“B”初始化)。这是因为&o1仍然引用MyObjectClass的原始实例。
但是,如果&o1已经通过out修饰符传递,则在方法调用完成后,&o1将指向上次分配给该参数的任何位置;在本例中,是MyObjectClass的新实例。通过引用传递参数,而不是对象。在下面的示例中使用参数的Out规范时,类AddStuff只有一个公共方法DoAdd。这会将两个数字相加,然后将它们指定为不同的数字。在方法声明的签名中,第一个参数没有使用out语句声明,而第二个参数是使用out语句声明的。
类方法方法DoAdd(&P1表示编号,&P2表示编号输出);结束类;方法DoAdd &X = &P1 + &P2;&P1 = 1;&P2 = 2;-;
在下面的PeopleCode示例中,从类AddStuff实例化了一个名为&Aref的对象。还定义了两个参数&I和&J。
本地号码&Aref =创建AddStuff();本地号码&I = 10;本地号码&J = 20;
下面的代码示例是正确的。&J被更改,因为方法签名中有because语句,而且值是通过引用传递的。&I的值不会更新。
&Aref.DoAdd( &I,&J);/*更改&J,但不更改&I */
下面的代码示例导致设计时错误。第二个参数必须通过引用传递,而不是通过值传递。
&Aref.DoAdd(10,20);/*错误-第二个参数不是变量*/
https://stackoverflow.com/questions/40131503
复制相似问题