Как передать глобальный или обработать приватный глобальный, ссылаясь на процедуру
Скажем, у меня есть процедура Cache ObjectScript, которая ожидает получить параметр массива по ссылке:
TotalArray(Arr)
S Total=0
S K=""
F {
S K=$O(Arr(K))
Q:K=""
S Total=Total+Arr(K)
}
Q Total
Я могу вызвать эту процедуру с обычным массивом по ссылке с точечным синтаксисом:
S A(1)=5
S A(2)=10
W $$TotalArray(.A)
Но когда я пытаюсь сделать это с глобальной ссылкой, я получаю синтаксическую ошибку с точечным синтаксисом:
S ^A(0)=5
S ^A(1)=10
W $$TotalArray(.^A)
Как правильно передать глобальный массив по ссылке на процедуру ObjectScript? Я также хочу быть в состоянии пройти процесс приватных глобальных ^||Array
конвенции)
2 ответа
Решение
Если вы используете его с косвенной ориентацией, как предложил Брэндон:
TotalArray(ArrName)
S Total=0
S K=""
F {
S K=$O(@ArrName@(K))
Q:K=""
S Total=Total+@ArrName@(K)
}
Q Total
а потом ты называешь это так
W $$TotalArray("^A")
или даже
W $$TotalArray("^A(""someIndex"")")
Это невозможно. Вы могли бы либо
- Передайте имя глобального и получите доступ к нему по косвенному
- MERGE global в локальную переменную (если она достаточно мала) и передает ее по ссылке.