保持本地範圍我正在嘗試創建一個可視化數據的框架 - 這使我創建了一個帶有幾個按鈕的模板,這些按鈕可以作用於傳遞給模板的數據。
但是,我遇到了一個問題,即創建一個帶有函數調用的按鈕的範圍 - 調用此函數的方式與我根據代碼中按鈕的位置所考慮的範圍不同。
我在下面提供了一個最小的工作示例 - 我希望當單擊每個按鈕時,生成的函數調用將在原始定義範圍內發生。
有沒有辦法實現這個目標?
謝謝!
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 Function>傳遞引用(this)按鈕,您可以引用其父級VListBox或其父級<< parent,tab。
首先,我不會使用函數來創建選項卡。 我修改了腳本以使用標籤頁框,我創建了一個變量或它們。 注意,因為您正在使用函數,如果您指定所有變量但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>