名前空間とプロジェクトこんにちは、
私たちは、アドインを介して他の同僚と共有するカスタム関数をいくつか使用しています。
「カスタム」名前空間はグローバル名前空間に作成され、関数には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 とプロジェクトからカスタム関数を並行して使用/アクセスするにはどうすればよいですか?
自動化とスクリプトRe: プロジェクト内からのカスタム関数回避策としては、次の方法があります:
シンボル *) をルート名前空間 (::: 経由) に保存し、シンボル経由でカスタム関数名前空間にアクセスします。
::: 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
Re: プロジェクト内からのカスタム関数ああ、これはカスタム関数の問題ではなく、名前空間とプロジェクトに関する一般的な問題のようです。
::: 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"))));Re: プロジェクト内からのカスタム関数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よりもはるかに実用的です。
Re: プロジェクト内からのカスタム関数同様のトピックに関する以前のディスカッション:
プロジェクト内でアドインを実行できません
Re: プロジェクト内からのカスタム関数とても助かりました。リンクを共有していただき、ありがとうございます。
Re: プロジェクト内からのカスタム関数Jmp と JSL の Tiny Trapsにトピックを追加し、名前空間関連のトピックをバンドルしました。