Intersystems缓存对象脚本通过引用传递属性作为参数

时间:2015-04-26 15:47:38

标签: syntax parameter-passing intersystems-cache objectscript

假设:

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

知道在caché对象脚本中:

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

如果我想传递属性“intA”byRef,我该如何调用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
}

}

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

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")
}