こんにちはスタッフ
スクリプトで JMP クラスの使用を開始したかったのですが、残念な動作に遭遇しました。メソッドに引数を渡すと、引数がクラス メンバーであるかのように扱われ、メソッドへの引数が依存するかどうかに依存するため、クラスがほとんど使用できなくなります。クラスメンバーはすでにその変数を使用しています。 global または here: 変数をメソッドに強制的に送信する方法が見つかりませんでした。 バグだと思います。 次のコードは、この動作を再現します。
define class ("aClass",
varA = .;
aMethod=method({someVar},
varA = someVar;
show(someVar);
)
);
obj=new object(aClass());
varB=3;
obj:aMethod(varB);
varA=4;
obj:aMethod(varA);
obj:aMethod(::varA);
上記では、varA はグローバル変数とメソッド変数の両方であるため、"aMethod" は引数で 4 ではなく 3 を取得します。 そのため、動作は内部クラス メンバー名とグローバル変数名の間の相互作用によって影響を受けます。
敬具、
トーマス
そして、クラスを使用したいくつかの投稿:
クラス定義の使い方
JSL オブジェクトを使用した関数型プログラミング
私は同意します、それはバグのように見えます。@EvanMcCorkle @Audrey_Shull
回避策は、メンバー変数名の前に m_ を付けることです。 私はこのプレフィックスまたはバリエーションを長い間使用して、コードを読んでいる人がメンバー変数を見ていることを理解できるようにしました。