Как передать глобальный или обработать приватный глобальный, ссылаясь на процедуру

Скажем, у меня есть процедура 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"")")

Это невозможно. Вы могли бы либо

  1. Передайте имя глобального и получите доступ к нему по косвенному
  2. MERGE global в локальную переменную (если она достаточно мала) и передает ее по ссылке.
Другие вопросы по тегам