Межсистемный кэш Object Script передает свойство в качестве параметра по ссылке
Дано:
- Класс "A" со свойством%Integer "intA"
- Класс "B" с classMethod foo(ByRef num As %integer), который получает параметр byRef и выполняет некоторые вычисления.
И зная это в caché Object Script:
- Если вы хотите передать параметр по ссылке, вам нужно поставить точку '.' перед именем переменной, переданной ref.
- Внутри класса, если вы хотите сослаться на свои собственные свойства, вам нужно поставить перед именем свойства 2 точки '..'
Как мне вызвать classMethod foo, если я хочу передать свойство "intA" byRef? Потому что указывать имя свойства с 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 ответ
Решение
Только переменные локальные или глобальные, могут быть переданы по ссылке. Для свойств это не возможно. Вы можете передать имя свойства в виде строки и установить значение с помощью метода $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")
}