Re: JMP コンパイラのコンテキスト認識の改善 - ステータスが「承認済み」に変更されましたご意見ありがとうございます。 私たちは、コア JMP 関数を上書きする可能性がある場合にユーザーに知らせたいと考えています。 より専門的なユーザーにとって、これがどれほど迷惑であるかはわかります。 これを開発チームと共有し、このような警告メッセージを抑制する方法を提供できるかどうかを確認します。 課題は、どの警告メッセージを抑制すべきか、または抑制できるかをどのように判断するかということです。
このような関数を何度も定義していると、ログがいっぱいになる可能性があると思います。 スクリプトや関連するログ ファイルでこのようなことがどのくらいの頻度で発生していますか? また、関数を別の方法で定義すると、この種のメッセージがログに記録されるのを防ぐことができます。
"test namespace":customprint=Function({}, "will this print?");
Re: JMP コンパイラのコンテキスト認識の改善 - ステータスが「調査中」に変更されましたRe: JMP コンパイラのコンテキスト認識の向上ご返答ありがとうございます -- あまり迷惑ではありません -- AddinLoad が実行されてクラスが初期化されるときです -- インスタンス ジェネレータを次のメソッドを使用するように切り替えて、これらのメッセージが毎回ログに記録されるのを回避しました新しいインスタンス。
したがって、それがあなたの側で簡単に実行できるものであれば、それは非常に良いことですが、決して優先度が高いわけではありません。
new namespace( "test",
{
print = Function( {},
show( "test" )
)
}
);
"test":print;Re: JMP コンパイラのコンテキスト認識の向上これはより良い回避策だと思います。
x=New Namespace( "This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!" );
x["print"] = Function( {},
Print( "hello 1" )
);
"This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!":print(); // hello 1
// or
y=namespace("This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!");
y["print"] = Function( {},
Print( "hello 2" )
);
"This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!":print(); // hello 2
// or
namespace("This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!")["print"] = Function( {},
Print( "hello 3" )
);
"This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!":print(); // hello 3
x:print(); // hello 3
y:print(); // hello 3
// the above is to work around the log message from variations on this:
x:print = Function( {},
Print( "hello 4" )
);
/*
The user-defined function "Print" conflicts with the JMP function "Print".
Use a scoped reference (for example, Global:Print or Here:Print) to call
your user-defined function. Other uses of "Print" in your script source
will continue to call the JMP function.
*/
// which actually works...
"This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!":print(); // hello 4
// logcapture() is a less pretty way to make the message go away.
// The associative array style assignment prevents JMP from looking up the "print"
// name in the usual way.
// shownamespaces(); // there is only one; x and y are alternate ways to use it
NewNameSpace の引数リストに代入ステートメント (単純な定数以外) を追加するのは好きではありません。代入ステートメントは依然として評価が必要な式として保持されるからです。 したがって、あなたの例では、 print は関数の定義を保持する式であり、実際の関数が実行される前に、使用するたびに実際の関数に再評価されます。 それする関数を保持する print という名前の変数は決して作成されないため、目的は達成されます...関数に評価される式だけです。
z = New Namespace(
"z",
f = If( Is Missing( Beep() ), // this is evaluated later, on each access
1,
2
)
);
z:f; // beep!
私も同意します。このケースでは現在のメッセージは発生しないはずです。修正されることを願っています。
JMP コンパイラのコンテキスト認識の向上このウィッシュリストリクエストのきっかけは何ですか?ログに送信されるメッセージは時間がかかり、ユーザーを混乱させる可能性があります
改善してほしいことは何ですか?ログを無駄なメッセージで埋め尽くさないようにする
この考え方がなぜ重要なのでしょうか?本当はもっと迷惑なんです。
次の JSL について考えてみましょう -- カスタム名前空間内の「print」という名前に関数をアタッチしています。
New Namespace( "This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!" );
"This is a NAMESPACE -- it is different than BUILTIN!!!!!!!!!!!!!!!":print = Function( {},
Print( "Why does JMP think I am trying to overwrite a Builtin???" )
)

この警告が表示されるのはなぜですか?ビルトインを上書きしようとしているわけではありません。名前を名前空間内に配置していること、そしてそれがその名前が保持する値にアクセスする方法であることはわかっています。
JMP コンパイラは、名前が名前空間内にあることを認識して、これらのメッセージをログに送信しないようにできますか?私は名前空間を使用してカスタム クラスを作成するため、新しいインスタンスが作成されるたびに、これらの余分なメッセージがログにスパム送信されます。
自動化とスクリプト作成Re: JMP コンパイラのコンテキスト認識の改善 - ステータスが「確認済み」に変更されました