系统间缓存对象脚本通过引用将 属性 作为参数传递

Intersystems cache Object Script pass property as parameter by reference

鉴于:

并且知道在缓存对象脚本中:

如果我想通过 属性 "intA" byRef,我应该如何调用 class 方法 foo?因为在 属性 名称前加 3 个点似乎不是正确的方法。

代码片段class B:

Class B Extends %RegisteredObject
{
///doubles num
ClassMethod foo(ByRef num As %Integer)
{
    set num = num*2
}
}

代码片段class答:

Class A Extends %RegisteredObject
{

Property intA As %Integer;

Method test()
{
    set ..intA= 5
    do ##class(B).foo(..intA)
    //If correctly passed by ref, ..intA should be 10, but it is still 5
}

}

提前致谢。

只能通过引用传递局部变量或全局变量。对于属性,这是不可能的。您可以将 属性 名称作为字符串传递,并使用 $属性 方法设置值。如果您需要在其他 class 中的 class 方法 or/and 中执行此操作,您也应该传递变量 this。所以你的代码可以像这样:

ClassMethod foo(this, propName As %String)
{
  set $property(this, propName)=$property(this, propName) * 2
}

Method test()
{
  set ..intA=5
  do ##class(b).foo(%this, "intA")
}