你能在Pe​​opleCode中通过引用传递吗?

时间:2016-10-19 12:32:17

标签: pass-by-reference peoplesoft

我是PeopleCode的新手,当我正在学习函数时,我注意到在PeopleCode中,我们通常使用%PATIENT_ID传递值。一位朋友告诉我,您也可以通过PeopleCode中的引用传递但是如何?

3 个答案:

答案 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 */