命名空间和项目你好,
我们使用一些自定义函数并通过插件与其他同事共享。
“自定义”命名空间是在全局命名空间中创建的,可以通过custom:myfunction访问函数。
问题:一些同事使用项目。
一个项目有它自己的全局命名空间 - 从那里,自定义函数是不可访问的:
Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x}, x + 20 ) ));
project = New Project(
Run Script(Try(custom:myfunc(1), Caption ("Namespace not accessible")));
);
另一方面,无法在项目内部再次运行该脚本 [以在项目范围内创建重复的自定义函数]。似乎 JMP 找到了“全局”命名空间并尝试删除它(!!):
project = New Project(
Run Script(Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x, y}, x + y - 1 ) )));
);
如何从标准 JMP 和项目中并行使用/访问自定义函数?
自动化和脚本回复:项目内的自定义函数也许有一个解决方法:
在根命名空间中保存一个符号*)(通过:::),以通过符号访问自定义函数命名空间:
::: custom = New Namespace("custom" );
// now accessible from everywhere via :::custom
project = New Project(
Run Script(Caption(Char(Namespace Exists( ::: custom ))));
);
很遗憾:
Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x}, x + 20 ) ));
project = New Project(
Run Script(Try(:::custom:myfunc(1), Caption ("content of the Namespace is not accessible")));
);
*)注意:有趣——符号必须与命名空间具有相同的名称(!)
. 无效的方法:
::: customNS = New Namespace( "custom" );
...
:::customNS:myFunc(1)
虽然:
is namespace(:::customNS) // -> 1
回复:项目内的自定义函数啊,这不是自定义函数的问题,它似乎是命名空间和项目的普遍问题:
::: myNS = New Namespace("myNS");
:::myNS:x ="success";
caption ("direct: "|| :::myNS:x);
wait(2);
caption(remove);
project = New Project(
Run Script(Try(Caption("project: " || :::myNS:x), Caption ("fail")));
);有趣的是:它是这样运作的
...但不太实用
project = New Project(Run Script(Try(Caption("project: " || namespace(:::myNS):x), Caption ("fail"))));回复:项目内的自定义函数我通知了 JMP 支持(# 00170669)并得到反馈说这些问题被认为是一个错误:
:::myNs; // // New Namespace("myNS", ...)
As Root(myNs); // New Namespace("myNS", ...)
//:::myNs:x; // fail in project, works in script window outside project
As Root(myNs):x // success
Eval(:::myNs):x; // success
Namespace(:::myNs):x; // success
一个绝妙的技巧:本地化根命名空间:
myVar = :::myNs
myVar:x // success
非常感谢, @Jasean !!! 非常流畅,比namespace(:::myNS):x实用得多。
回复:项目内的自定义函数先前的类似主题的讨论:
无法在项目中运行插件
回复:项目内的自定义函数这对我很有帮助,非常感谢您分享链接。
回复:项目内的自定义函数我刚刚将主题添加到Jmp 和 JSL 中的 Tiny Traps - 并捆绑了命名空间相关主题。