其他几种编程语言默认使用本地命名空间/环境,而不是全局环境。 JMP 专家表示,每当脚本编写(通常为本地命名空间)适合新脚本时,NamesDefaultToHere(1) 就是 BKM,以避免与其他 JMP 脚本发生冲突。 当您希望脚本位于全局命名空间中时,定义 NamesDefaultToHere(0) 会比使用“true”参数定义每个脚本更方便
你好@cnattrass , 谢谢你的建议! 我们已收到您的请求并将予以考虑。
在我看来,将全局命名空间作为默认值是一个极其糟糕的设计决策,尽管我知道这对于向后兼容早期版本的 JMP 中编写的 JSL 脚本可能是必要的。
我认为,当由于多个脚本的变量名冲突而开始发生奇怪的、难以调试的事情时,任何新的 JSL 编码人员都会经历艰难的过程才能了解这一点;特别是,先前在全局命名空间下运行的脚本留下的碎片。由于变量不需要在 JSL 中声明,并且全局命名空间是默认值,因此我相信在脚本顶部将所有变量初始化为空状态绝对至关重要,以确保意外值不会侵入我的脚本,从而导致混乱和混乱。
当然,把名称默认为此处(1);位于曾经编写的每一个 JSL 脚本的顶部,无处不在,始终如此,除非该脚本需要出于某种奇怪的原因使用全局名称空间。即使在这种情况下,我觉得最好将默认命名空间设置为 Local 并显式使用将所有全局变量引用为全局命名空间::全局名称句法。因此,如果默认全局命名空间对于向后兼容性确实是必要的,那么我们应该可以选择让脚本编辑器始终插入名称默认为此处(1);在所有新脚本的顶部,而不是要求编码人员每次都记住并键入它。
即使采取了这些预防措施,我有时仍然会遇到发生碰撞的边缘情况。例如,求和和产品函数包含一个名为的隐式变量我默认情况下。当在我已经设置默认本地命名空间的脚本内部使用时,这很好。但是列公式呢?我通常不会将列公式视为脚本,尽管它们正是如此。我使用 GUI 公式编辑器以图形方式编辑它们。我从来没有想过。
嗯,我第一次使用求和在列公式中,我还碰巧运行了一个表脚本,其中我忘记设置本地命名空间,其中我使用了为了循环迭代器为我。毫不奇怪,这导致了混乱和混乱。应用程序变得无响应,陷入无限循环,我不得不终止该任务。然后我不得不再尝试几次,才终于意识到我犯了一个可怕的、难以理解的错误,这是由上帝设置的陷阱所煽动的。求和是有害的全球性的我迭代器。长话短说,现在即使在列公式中,我也双击脚本编辑器并插入名称默认为此处(1); 。没有它,任何脚本都是不安全的。