我正在评估嵌入在C ++应用程序中的脚本语言解释器。 TCL / cpptcl和Lua现在是我的焦点。 TCL有一个很好的功能,使我能够“跟踪变量访问”。所以每当我读取一个已定义的变量时,我的read-callback函数就会被触发:
int read_trace(const int& v, void *) {
cout << "read trace triggered" << endl;
return v;
}
...
void tclInterpreter() {
std::cout << ": Starting TCL interpreter!" << std::endl;
// new TCL
Tcl::interpreter i;
i.def_read_trace("tracedVar", "read", read_trace);
// load the script
ifstream script("helloworld.tcl");
// run the script with the given arguments
i.eval(script);
}
因此,如果我现在从我的C ++应用程序执行以下TCL:
set tracedVar 10
for { set i 0 } { $i <= 5 } { incr i } {
puts $tracedVar
}
我收到了输出:
read trace triggered
10
read trace triggered
10
read trace triggered
10
read trace triggered
10
read trace triggered
10
read trace triggered
10
所以我执行了我的变量读回调,然后执行var。
的puts-value问题:我可以用Lua做这个,如果是的话怎么样?我没有找到任何关于此的直接主题。引起我注意的只是调试Lua,调试器(调试API)会监视变量的值。但我不想关注价值变化,而是关注价值变化。
答案 0 :(得分:1)
我认为在lua中最接近这一点的是桌面上的__index
metamethod(如果你只想触发一个,则检查特定的密钥)。
如果需要,甚至可以在默认的全局表(_G
)上完成。