3

鉴于:

  • 具有 %Integer 属性“intA”的类“A”
  • 具有 classMethod foo(ByRef num As %integer) 的类“B”,它获取参数 byRef 并进行一些计算。

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

  • 如果你想通过 ref 传递参数,你需要放一个点 '.' 在 ref 传递的变量名之前。
  • 在一个类中,如果你想引用你自己的属性,你需要在属性名称前加上 2 个点 '..'

如果我想通过引用传递属性“intA”,我应该如何调用 classMethod foo?因为在属性名称前面加上 3 个点似乎不是正确的方法。

代码片段 B 类:

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

代码片段 A 类:

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
}

}

提前致谢。

4

1 回答 1

2

只有变量局部或全局,可以通过引用传递。对于属性,这是不可能的。您可以将属性名称作为字符串传递,并使用 $property 方法设置值。如果您需要在类方法或/和其他类中执行此操作,您也应该传递变量 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")
}
于 2015-04-26T19:34:26.570 回答