ローカルスコープを維持する私はデータを視覚化するためのフレームワークを作成しようとしています - これは私がテンプレートに渡されたデータに作用できるいくつかのボタンを持つテンプレートを作成することにつながります。
しかし、呼び出す機能を持つボタンを作成するというスコープに問題があります。この機能の呼び出しは、コード内のボタンの位置に基づいて考えていたものとは異なるスコープで行われます。
以下に最低限の実用的な例を示しました - 各ボタンがクリックされるとき、結果として生じる関数呼び出しは元々の定義範囲内で起こるだろうと私は予想します。
これを達成する方法はありますか?
ありがとうございます。
Names Default To Here ( 1 );
insert_text = Function({tb, msg}, {Default Local},
tb << Add ( "Added", msg )
);
tab_function = Function({msg}, {Default Local},
Tab Box (
"one",
tb1 = Tab Box();
V List Box(
b = Button Box ( "Add", insert_text(tb1, msg))
);,
"two",
tb2 = Tab Box();
V List Box(
b = Button Box ( "Add", insert_text(tb2, msg))
);,
"three",
tb3 = Tab Box();
V List Box(
b = Button Box ( "Add", insert_text(tb3, msg))
);
)
);
New Window(
"Test Window",
tab_function("hi");
)再:ローカルスコープを維持する前のスクリプトで、insert_text関数がtab、tb、およびmsg、msgを参照していることに注意してください。 << Set関数は参照(this)ボタンを渡し、その親をVListBoxまたはその親<< parent(タブ)を参照できます。
まず第一に、私はタブを作成するための関数を使用しないでしょう。 タブページボックスを使用するようにスクリプトを変更し、変数またはそれらを作成します。 関数を使用しているので、msgをローカルにしてすべての変数を指定した場合、tab_functionの実行後に変数の参照は不明になります。{Default Local}にコメントしました。エラーを確認するにはコメントを外します。
私はinsert_text関数を修正してスクリプトがどのタブボタンが押されたかを知っていることを実証し、あなたはそのタブページに関する情報を得ることができます。各タブのボタンをテストします。
Names Default To Here ( 1 );
insert_text = Function({tb, msg}, {Default Local},
tb << select;
str = tb << get title;
str = "I am on tab " || str || " with message " || msg;
Caption(str); wait(2); Caption(remove);
tb << Append (TextBox( msg ));
tb << deselect;
);
tab_function = Function({msglist}, //{Default Local},
Eval(Eval Expr(
mytb= Tab Box (
tb1=Tab Page Box( "one",
V List Box(
b = Button Box ( "Add", insert_text(tb1, expr(msglist[1])) )
)
),
tb2 =Tab Page Box( "two",
V List Box(
b = Button Box ( "Add", insert_text(tb2, expr(msglist[2])) )
)
),
tb3=Tab Page Box("three",
V List Box(
b = Button Box ( "Add", insert_text(tb3, expr(msglist[3])) )
)
)
)
) )
);
New Window(
"Test Window",
tab_function({"hi","stay awhile", "goodbye"} );
);
//this command with throw an error with {Default Local}...once the tab_function runs tb1, etc are unknown
show( mytb << class name, tb2<<GET title=""></GET>再:ローカルスコープを維持する助けてくれてありがとう!しかし、これは私が探しているものではありません - 私は、"insert_text"関数の中から "insert_text"関数にその変数の参照を渡すことによって "tab_function"のローカル変数を参照できる必要があります。
再:ローカルスコープを維持する私はあなたが何をしようとしているのかわかりません。しかし、これは私の一番の推測です。いくつか修正しました。
Names Default To Here ( 1 );
insert_text = Function({tb, msg}, {Default Local},
tb << select;
Caption(msg); wait(2); Caption(remove);
tb << Sib Append (TextBox( msg ));
tb << deselect;
);
tab_function = Function({msg}, {Default Local},
Eval(Eval Expr(
Tab Box (
"one",
V List Box(
b = Button Box ( "Add",
<<SET function=""></SET>