创建具有不同范围的阵列副本

问题描述

是否有一种简单的方法可以通过保留所有原始值,而只是将数组的范围从共享更改为全局来创建数组的副本?

shared stringvar Array SHARED_ARRAY

global stringvar Array GLOBAL_ARRAY

解决方法

复制数组及其所有索引值实际上与将值从一个变量复制到另一个变量没有什么不同。不过,在使用数组时要考虑一些细微差别。

要复制数组,您可以在公式字段中使用以下代码。

Shared StringVar Array SHARED_ARRAY;
Global StringVar Array GLOBAL_ARRAY := SHARED_ARRAY;

解析此公式后,SHARED_ARRAY中的任何值都将复制到GLOBAL_ARRAY。但是,这正是细微差别发挥作用的地方。第一个问题是公式不能返回非标量值。由于数组包含多个值,因此不是标量。因此,上面的公式将导致错误,因为代码的最后一行返回整个GLOBAL_ARRAY。为避免此错误,您可以将公式修改为以下内容。

Shared StringVar Array SHARED_ARRAY;
Global StringVar Array GLOBAL_ARRAY := SHARED_ARRAY;
GLOBAL_ARRAY[1];

现在,公式仅返回数组的第一个索引,并且现在是标量,并且不会引发错误。尽管您可能想取消公式字段,因为它会打印数组的第一个索引值。

我要警告您的第二个细微差别是关于如何用值填充SHARED_ARRAY变量。您将要确定在解析上面的公式之前,它已经完全填充了您要包含的所有值。这将需要一定了解报告的打印顺序部分,因此可以确定将上面的公式字段放在填充SHARED_ARRAY的部分之后的部分中。