如何在包含 C++ 的定义时解析和修改 LUA 文件?
2021-1-20 7:5:25
收藏:0
阅读:144
评论:0
我正在尝试使用 C++ 解析和修改 LUA 文件,这些文件与制图师有关。我是一个 LUA 新手,不能处理具有复杂结构的文件。以下是文件的示例:
//test.lua
include "map_builder.lua"
include "trajectory_builder.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
tracking_fame = "base_link",
published_frame = "base_link",
...
submap_publish_period_sec = 0.3,
...
}
--MAP_BUILDER
MAP_BUILDER.use_trajectory_builder_3d = true
MAP_BUILDER.num_background_threads = 7
--POSE_GRAPH
POSE_GRAPH.optimize_every_n_nodes = 640
...
--TRAJECTORY_BUILDER_3D
TRAJECTORY_BUILDER_3D.max_range = 50.
...
return options
接下来,
//map_builder.lua
include "pose_graph.lua"
MAP_BUILDER = {
use_trajectory_builder_2d = false,
use_trajectory_builder_3d = false,
num_background_threads = 4,
pose_graph = POSE_GRAPH,
...
}
pose_graph.lua:
//pose_graph.lua
POSE_GRAPH = {
optimize_every_n_nodes = 20,
constraint_builder = {
smapling_ratio = 0.03,
...
},
...
}
trajectory_builder.lua:
//trajectory_builder.lua
include "trajectory_builder_2d.lua"
include "trajectory_builder_3d.lua"
TRAJECTORY_BUILDER = {
trajectory_builder_2d = TRAJECTORY_BUILDER_2D,
trajectory_builder_3d = TRAJECTORY_BUILDER_3D,
collate_fixed_frame = true,
...
}
trajectory_builder_2d.lua:
//trajectory_builder_2d.lua
TRAJECTORY_BUILDER_2D = {
...
}
trjectory_builder_3d.lua:
//trajectory_builder_3d.lua
MAX_3D_RANGE = 100.
...
TRAJECTORY_BUILDER_3D = {
...
}
最后,这是我的测试代码:
我像这样重新编辑了我的代码,似乎我应该在加载文件之前在 luaInclude() 中处理 MAP_BUILDER 等。那么,在加载 test.lua 文件之前处理它们的正确方法是什么?
int luaInclude(lua_State *L) {
printf("include file: %s\n", lua_tostring(L, -1));
// get include lua file name and handle it here
// how to handle MAP_BUILDER etc.?
}
int main() {
lua_State *L = luaL_newstate();
luaL_openlibs(L);
lua_register(L, "include", luaInclude);
if(luaL_dofile(L, "test.lua")) {
printf("read file failed: %s", lua_tostring(L, -1));
return;
}
lua_getglobal(L, "options");
int size = lua_gettop(L);
lua_pushnil(L);
// here to do sth.
// like modify "submap_publish_period_sec" from 0.3 to 0.6
lua_close(L);
return 0;
}
但是,我得到错误:
test.lua: attempt to index global 'MAP_BUILDER'(a nil value)!
那么,如何在 test.lua 中处理 "MAP_BUILDER"、" POSE_GRAPH" 和 " TRAJECTORY_BUILDER_3D" 等类似的内容?帮帮我吧!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
