我确定这已经发布在某个地方,但我找不到它。
我很困惑如何在 JSL 中处理变量的范围。有人可以帮助澄清它是如何工作的。
我几乎总是使用 i 作为循环的索引变量。例如,在我的脚本中,我将有一个 for 循环,以 i 作为调用另一个函数的索引。在这个函数中,还有一个以 i 为索引的 for 循环。这在 C/Java/etc 中从来都不是问题。似乎有时它在 jsl 中有效,有时则无效。我没有示例,因为我无法弄清楚问题发生的确切位置。我认为这是对 JSL 中变量范围的基本理解。
在 JSL 中,一个变量,让我们使用名为“i”的变量示例描述为
命名空间:我
如果未指定任何名称空间,则正式规范为:
::我
由于 JSL 中的默认命名空间是一个名为“:”的命名空间......非常奇怪,但这是有历史原因的。所以如果你输入
我 = 7;
JMP 看到的是:
::我= 7;
所以,现在如果在 JSL 脚本的任何部分,变量 i 被更改,然后在稍后引用,它将具有新值
showit = Function( {I},
Show(I);
);
I = 2;
showit(I);
I=3;
showit(I);
它返回
I = 2;
I = 3;
现在,函数可以通过使变量成为函数的局部变量来隔离变量
showit = Function( {I},{I},
I=55;
Show(I);
);
I = 2;
showit(I);
show(i);
这段代码的结果是:
I = 55;
i = 2;
请注意,在全球范围内使用 i 的值没有改变。
现在有些混乱:
当我说 i 的值可以更改,并且 i 的所有后续使用都将反映该更改时,这意味着即使在正在运行的不同脚本中它也会更改。因此,如果运行一个包含变量 i 的新脚本,它将具有在先前 JSL 脚本中设置的 i 的值。因此,语句“Names Default to Here( 1 );”已实施。这个语句做了两件事。首先,它将命名空间从“:”更改为“Here”。其次,它将“Here”命名空间中的所有变量隔离为正在运行的脚本中的变量。所以现在,如果您有以下脚本
Names Default to Here( 1 );
i = 7;
变量 i 的这个实例只会通过在脚本中使用 i 来更改.....没有其他脚本可以访问该变量 i 的更改。
聚苯乙烯 变量 i 的正式描述是:
我在这
以及在脚本中创建的脚本中的任何变量,在“Names Default to Here( 1 );”之后语句将自动放入命名空间调用 Here。
Names Default to Here( 1 );
i = 7;
show(here:i)
我不能使用“here:”来明确地处理此处命名空间中的变量吗?
为什么列地址是通过例如“ :性别 ”来表示的?
空命名空间意味着:“当前数据表() ”?