print() の変数スコープの動作は、他のすべてと一致するべきである。このウィッシュリストのリクエストのきっかけは何だったのでしょうか?
変数スコープの問題のデバッグにかなりの時間を費やしました。関数内で {default local} を使用すると(私はほとんどの場合そうしています)、スコープを :: で明示的に指定しない限り、関数はグローバル変数にアクセスできません(私はそのことを知りませんでした)。しかし、Print() は :: がなくても黙って自身を探し始めます。Print() は非常に基本的なデバッグツールなので、これは非常に紛らわしいです。
どのような改善を望みますか?
Print() は、変数スコープに関して他のすべての関数と同じように動作するはずです。
なぜこの考え方が重要なのか?
現在の行動は非論理的で一貫性がない。
JMP19.1.1
自動化とスクリプト作成件名:print() の変数スコープの動作は他のすべてと一致させるべき - ステータスが「情報が必要」に変更されましたこんにちは、 @JohnJoyceFlusso さん。ご要望をお送りいただきありがとうございます。この動作を示すスクリプトを提供していただけますか?
件名: print() の変数スコープの動作は他のすべてと一致するべきです以下に、問題を示す最小限のスクリプトを示します。Print() は動作しますが、msgbox() は動作しません。
注:これは実用的な機能として意図されたものではなく、単に問題点を示すためのものです。
残念ながら、Print() 関数は変数スコープに関して他の関数とは異なる動作をします。
このようなことをする言語は他に見たことがありません。これはおかしいと思います。
私の提案は、Print() 関数は他の関数と異なるべきではないということです。
dummy = "Hello";
test = Function( {},
{default local},
Print( dummy );
msgbox( dummy );
);
test();
件名: print() の変数スコープの動作は他のすべてと一致するべきですmsgbox() 関数について混乱させてしまい申し訳ありません。実はこれは組み込み関数ではなく、私が作成したものです。
私の主張を裏付ける例を挙げましょう...ラジオボタンの最初の試みでは、ローカルで「options」が定義されていないため、オプションが表示されません。しかし、print() は不思議なことにそれにアクセスできます。
ローカルでオプションを定義すると、同じラジオボタンが2回目も正常に動作します。
要点は、print() 関数は他の関数と異なる動作をするべきではないということだ。そうでないと、デバッグツールとして使う際に問題が生じるからだ。
options = {"A", "B"};
test = Function( {},
{default local},
Print( options );
New Window( "Pick one",
<
<MODAL></MODAL>
<BR /> <BR />
件名: print() の変数スコープの動作は他のすべてと一致するべきです@JohnJoyceFlusso
関数内から eval( eval expr( ) ) を使用して「options」変数にアクセスすることもできます。これは私の環境では動作します。
options = {"A", "B"};
test = Function( {},
{default local},
Print( options );
eval( eval expr( New Window( "Pick one",
<
<MODAL></MODAL>
件名: print() の変数スコープの動作は他のすべてと一致するべきですありがとうございます。はい、その通りです(サポート担当者が指摘したように、「options」に::optionsとしてアクセスする場合も同様です)。
私の問題は、Print() 関数が他の関数と異なる動作をすることであり、これは非論理的であるということです。