我是PeopleCode的新手,当我正在学习函数时,我注意到在PeopleCode中,我们通常使用%PATIENT_ID传递值。一位朋友告诉我,您也可以通过PeopleCode中的引用传递但是如何?
答案 0 :(得分:7)
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 Classes,则其行为会有所不同 方法:
可以使用参数列表
中的OUT关键字通过引用传递简单类型 method addOne(&num as integer out)
答案 1 :(得分:1)
在与执行代码相同的上下文中定义的函数,例如页面/组件/记录/字段事件PeopleCode始终将参数视为引用。
在应用程序类中,可以使用' out'来定义方法上简单类型的参数。关键词,陈述他们是一个参考。方法还自动将参数作为复杂类型的引用传递。想一想:"如果有很多数据,那就是参考"
答案 2 :(得分:1)
此文档对您非常有帮助。 https://docs.oracle.com/cd/E26239_01/pt851h3/eng/psbooks/tpcr/chapter.htm?File=tpcr/htm/tpcr07.htm
使用对象数据类型传递参数
具有对象数据类型的参数始终通过引用传递:
/* argument passed by reference */ method storeInfo(&f as File);
如果为带有对象的方法参数指定out修饰符 数据类型,它成为参考参数。这意味着 参数变量通过引用而不是对象传递 它指向何时通过。
例如,如果使用out修饰符传递object参数:
method myMethod(&arg as MyObjectClass); Local MyObjectClass &o1 = create MyObjectClass("A"); Local MyOtherObjectClass &o2 = create MyOtherObjectClass(); &o2.myMethod(&o1); And inside myMethod this occurs: Method myMethod &arg = create MyObjectClass("B"); end-method;
由于方法参数在myMethod体内重新分配, & o1没有指向MyObjectClass的新实例(已初始化 方法调用完成后使用“B”)这是因为& o1仍然 引用MyObjectClass的原始实例。
但是,如果& o1与out修饰符一起传递,则在 方法调用完成,& o1指向最后一个参数 分配给;在这种情况下,MyObjectClass的新实例。该 参数而不是对象通过引用传递。运用 参数的Out规范
在以下示例中,类AddStuff具有单个public 方法,DoAdd。这会将两个数字相加,然后将它们分配为 不同的数字。在方法声明的签名中, 第一个参数未声明为out语句,而 第二个是。
class AddStuff method DoAdd(&P1 as number, &P2 as number out); end-class; method DoAdd &X = &P1 + &P2; &P1 = 1; &P2 = 2; end-method;
在以下PeopleCode示例中,名为& Aref的对象是 从AddStuff类实例化。两个参数,& I和& J是 也定义了。
local AddStuff &Aref = Create AddStuff(); local number &I = 10; local number &J = 20;
以下代码示例是正确的。 & J因为而改变了 方法签名中的outstatement,因为值正在存在 通过引用传递。 & I的值未更新。
&Aref.DoAdd(&I, &J); /* changes &J but not &I */
以下代码示例导致设计时错误。第二 参数必须通过引用传递,而不是通过值传递。
&Aref.DoAdd(10, 20); /* error - second argument not variable */