命名空間和項目你好,
我們使用一些自訂函數,透過插件與其他同事共享。
「自訂」命名空間是在全域命名空間中建立的,可以透過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 - 並捆綁了與命名空間相關的主題。