Межсистемный кэш 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")
}
Другие вопросы по тегам