【问题标题】:Tracing variables in Lua for read access to start user defined C++ method/function跟踪 Lua 中的变量以进行读取访问以启动用户定义的 C++ 方法/函数
【发布时间】:2014-07-24 12:37:40
【问题描述】:

我正在评估要嵌入到 C++ 应用程序中的脚本语言解释器。 TCL/cpptcl 和 Lua 现在是我关注的焦点。 TCL 有一个很好的功能,使我能够“跟踪变量访问”。所以每当我读取一个定义的变量时,我的读取回调函数就会被触发:

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)会观察变量的值。但我不想关注价值变化,而是关注价值获取。

【问题讨论】:

  • 欢迎来到 Stack Overflow!请不要混淆LuaLUA。两种语言是不同的。 “Lua”是一个名字,在葡萄牙语中的意思是“月亮”。请不要写它为“LUA”,这样既丑陋又令人困惑,因为那样它就变成了different meanings的首字母缩写,代表不同的人。

标签: c++ callback lua


【解决方案1】:

我认为在 lua 中最接近这一点的是桌子上的 __index metamethod(如果您只想触发一个,请检查特定键)。

如果需要,这甚至可以在默认全局表 (_G) 上完成。

【讨论】:

  • 这是我第一次接触 Lua,如果这对我来说可能不是很明显,请原谅。这对于表来说确实很有趣。我找到了一个关于如何在表格上工作的小教程 (link)。通读这篇文章,我知道如何在访问表时调用任意函数。如果一个简单的变量应该完成这项工作,我无法强制使用表。怎么样... myVar = 6 print(myVar) myVar 不是表格。 print 正在访问 myVar 的值。所以在 print(myVar) 上需要调用一个用户定义的函数。
  • 默认的全局表(你为全局变量分配和检索的)是一个表(被引用解释器公开为_G)。因此,您也可以使用 __index 元方法。话虽如此,如果您需要在不破坏被调用的 __index 元方法的情况下允许分配,则不能对局部变量执行此操作,并且如果您需要允许分配,则无法在没有代理(和 __newindex 元方法)的情况下执行此操作。
猜你喜欢
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 2020-03-20
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多