在使用 Lua 作为嵌入式语言到 C ++ 中,是否有一种易于使用方便的方法来查找变量在 Lua 中的定义?

我正在编写嵌入到 C++ 中的 Lua 脚本。我发现找到在 Lua 中使用的变量的原始定义并不方便,因为它很可能是在 C++ 中定义的。例如,

function Guidance.get_turn_lanes(way,data)
  local psv_fw, psv_bw = get_psv_counts(way,data)
  local turn_lanes_fw, turn_lanes_bw = Tags.get_forward_backward_by_key(way,data,'turn:lanes')
  local vehicle_lanes_fw, vehicle_lanes_bw = Tags.get_forward_backward_by_key(way,data,'vehicle:lanes')

  return process_lanes(turn_lanes_fw,vehicle_lanes_fw,psv_bw,psv_fw) or turn_lanes,   -- 在哪里可以找到变量 turn_lanes 的定义?
         process_lanes(turn_lanes_bw,vehicle_lanes_bw,psv_fw,psv_bw) or turn_lanes
end

现在我使用 Atom 的“项目中查找”选项卡来搜索关键字 turn_lanes,尝试找到它的定义位置。我想知道是否有更好的方法来查找 turn_lanes 的原始定义。此外, C++ 和 Lua 一般是如何通信的?(我希望第二个问题不太天真或太笼统。)

点赞
用户4984564
用户4984564

是和否。

Lua 实际上并不记得变量定义在哪里(也不关心)。然而,根据你需要找到什么,有一些技巧可以尝试。

__newindex 元方法

_G 添加一个 __newindex 元方法,可以在定义新的全局变量时打印一些输出。将其放置在脚本中执行任何其他操作之前的某个位置。你可以使用 debug.getinfo 找出在调用栈中的位置。

也许你可以使用 -l 标志在任何其他模块加载之前加载此 hack(并在安装钩子之前 sneaking in 一个全局变量)

debug.getinfo

如果你要找的是 Lua 函数,可以使用 debug.getinfo 找出函数定义的位置。对于使用 luac -s 编译的没有调试信息的代码,这种方法效果较差。

外部工具

在许多情况下,使用外部工具查找代码中的内容更容易。在你的问题下面的评论中提到了一些不错的选择:

  • ZeroBrane(一个 Lua IDE)
  • git grep(如果你正在使用 git)
2019-11-18 08:13:36