系统间缓存对象脚本通过引用将 属性 作为参数传递
Intersystems cache Object Script pass property as parameter by reference
鉴于:
- A class "A" 带有 %Integer 属性 "intA"
- A class "B" 具有 class 方法 foo(ByRef num As %integer) 获取参数 byRef 并进行一些计算。
并且知道在缓存对象脚本中:
- 如果你想通过 ref 传递参数,你需要加一个点 '.'在 ref.
传递的变量名称之前
- 在 class 中,如果您想引用自己的属性,您需要在 属性 的名称前加上 2 个点 '..'
如果我想通过 属性 "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")
}
鉴于:
- A class "A" 带有 %Integer 属性 "intA"
- A class "B" 具有 class 方法 foo(ByRef num As %integer) 获取参数 byRef 并进行一些计算。
并且知道在缓存对象脚本中:
- 如果你想通过 ref 传递参数,你需要加一个点 '.'在 ref. 传递的变量名称之前
- 在 class 中,如果您想引用自己的属性,您需要在 属性 的名称前加上 2 个点 '..'
如果我想通过 属性 "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")
}