1

假设我有 Caché 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约定)

4

2 回答 2

2

这是不可能的。你也可以

  1. 传递全局名称,并通过Indirection访问它,或者
  2. 将全局合并到一个局部变量中(如果它足够小),并通过引用传递它。
于 2014-05-06T17:40:05.387 回答
2

如果您按照 Brandon 的建议间接使用它:

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"")")
于 2014-05-07T02:02:48.057 回答