保持本地范围我正在尝试创建一个可视化数据的框架 - 这使我创建了一个带有几个按钮的模板,这些按钮可以作用于传递给模板的数据。
但是,我遇到了一个问题,即创建一个带有函数调用的按钮的范围 - 调用此函数的方式与我根据代码中按钮的位置所考虑的范围不同。
我在下面提供了一个最小的工作示例 - 我希望当单击每个按钮时,生成的函数调用将在原始定义范围内发生。
有没有办法实现这个目标?
谢谢!
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>