1

说我有一个期望通过引用数组参数接收缓存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(@[email protected](K)) 
    Q:K="" 

    S [email protected]@(K) 
} 
Q Total 

然后调用它像这样

W $$TotalArray("^A") 

甚至

W $$TotalArray("^A(""someIndex"")") 
2

这是不可能的。你既可以

  1. 传名的全球,并通过Indirection访问它,或者
  2. MERGE全球到本地变量(如果它足够小),并传递引用。
+0

什么语法我会用于间接?我不能合并为局部变量,因为它的大小可能非常大。 –

+0

关于选项1的语法,你可以发布一个版本的TotalArray上面这样做吗? –

+0

链接的文档应解释如何执行此操作。如果您需要示例代码,我建议您联系InterSystems支持。 –