在C++中,我有一个map<string, string>,包含未知数量的条目.如何将其传递给Lua函数,以便Lua函数可以将数据用作表格?
为什么不在Luat:insert(9)工作?
(我想在表的末尾附加值9)
t = {1,2,3}
table.insert(t, 9) -- works (appends 9 to end of table t)
t:insert(9) -- does NOT work
Run Code Online (Sandbox Code Playgroud)
我一般都想
a.f(a,x)a:f(x)在Lua中是平等的
如何获取表格中的表格数据,我的意思是这样的:
t = { {a, b, c}, {d, e, f} };
Run Code Online (Sandbox Code Playgroud)
如果我写这行代码:
print( t[1] )
Run Code Online (Sandbox Code Playgroud)
结果将是 - >>> {a,b,c}
但
我怎么才打印字母"a"?没有使用ipairs我的意思是有什么方法可以使用类似的东西t[1]吗?
我知道Lua中的弱表功能,但我希望对单个变量有一个弱引用.
我已经看到这个提议建议API如下:
-- creation
ref = weakref(obj)
-- dereference
obj = ref()
Run Code Online (Sandbox Code Playgroud)
这看起来很理想.然而,这似乎并未出现在其他地方的文件中; 只有弱表.
我正在尝试做的是使用Lua中的以下代码显示表的内容.
local people = {
{
name = "Fred",
address = "16 Long Street",
phone = "123456"
},
{
name = "Wilma",
address = "16 Long Street",
phone = "123456"
},
{
name = "Barney",
address = "17 Long Street",
phone = "123457"
}
}
for k, v in pairs(people ) do
print(k, v)
end
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
1 table: 0x9a2d8b0
2 table: 0x9a2d110
3 table: 0x9a2cb28
Run Code Online (Sandbox Code Playgroud) 我用C创建了一个Lua表,但我不确定如何将该表推到堆栈的顶部,这样我就可以将它传递给Lua函数了.
有谁知道如何做到这一点?
这是我目前的代码:
lua_createtable(state, libraries.size(), 0);
int table_index = lua_gettop(state);
for (int i = 0; i < libraries.size(); i++)
{
lua_pushstring(state, libraries[i].c_str());
lua_rawseti(state, table_index, i + 1);
}
lua_settable(state, -3);
[ Push other things ]
[ Call function ]
Run Code Online (Sandbox Code Playgroud) 在我的主协程中,我根据用户操作从表中删除或添加条目.在后台,我想迭代表中的条目.我不介意特别是如果我错过了一次迭代的插入,只要我能在下一次迭代之前捕获它.
迭代它是否安全pairs?或者我应该使用next?
我需要将表转换为逗号分隔列表,以便将其保存到文本文件中.是否有内置的方法在Lua中执行此操作?
我正在使用Lua进行游戏,我需要使用广度优先搜索来实现快速路径搜索算法,该算法找到敌人AI和玩家之间的最短路径.
我将同时使用此算法最多3个敌人,并且地图是基于2维拼图的迷宫.我已经实现了碰撞检测,所以现在剩下要做的就是让敌人以一种可以快速完成并且最好每个敌人每秒约80-90次的方式找到玩家的最短路径.
当我之前实现广度优先搜索时,我在C++中使用了一个队列.从我读到的关于Lua的内容来看,使用表的堆栈实现非常有效,因为在push()(AKA table.insert)和pop()(table.remove)操作之后不需要移动元素.但是,我认为在Lua中大型队列的效率非常低,因为如果要在表的索引1中插入/删除某些内容,则表中的所有其他元素必须向上或向下移动.
因此,我想问一些Lua经验丰富的简单问题.在这种语言中,最简单和/或最快的队列实现是什么?是否有可能在Lua中拥有一个快速队列,或者只是普遍接受Lua总是被迫"移位"所有元素以进行队列操作,例如pop()或append()?
编辑:据我所知,Lua表中"移位元素"的底层实现是用C语言编写的,因此非常优化.在开始编写简单的表实现之前,我只想知道是否有更好的队列选项.
当我通过redis EVAL运行此代码时,它不会返回任何结果.知道为什么这不起作用吗?
redis-cli EVAL "$(cat bug.lua)" 0
Run Code Online (Sandbox Code Playgroud)
local retv = {}
retv["test"] = 1000
return retv
Run Code Online (Sandbox Code Playgroud)
如果我初始化表,那么单独打印值.
$ cat bug.lua
--!/usr/bin/env lua
local retv = {"This", "is", "a", "bug" }
retv["test"] = 1000
return retv
$ redis-cli EVAL "$(cat bug.lua)" 2 a b
1) "This"
2) "is"
3) "a"
4) "bug"
Run Code Online (Sandbox Code Playgroud)