在Lua中编写一个函数,创建两个表.我希望将表格分配给值名称,并添加x,并添加一个.例如,如果name是line,它将创建两个表linex和liney,但我无法弄清楚如何做到这一点.以下显然不起作用(仅用于显示目的),但我将如何进行此操作?
function makelinep(x,y,minrand,maxrand,name,length)
name..x = {}
name..y = {}
Run Code Online (Sandbox Code Playgroud)
后来我希望在写完值后访问"linex"和"liney".
我在C中有一个名为GetParameter的方法.我想从Lua中使用它.此方法将再次向Lua返回一些值.
我在C中构建表的方式是最常见的方式:
lua_newtable(L);
for (int i = 0; i < parameters; i++)
{
lua_pushnumber(L,i);
lua_pushstring(L,myParameter);
lua_settable(L,-3);
}
Run Code Online (Sandbox Code Playgroud)
在我看过的所有示例中,在此之后,您必须使用lua setGlobal设置结果表:
//set name for the result
lua_setglobal(ptLuaState, "resultTable");
Run Code Online (Sandbox Code Playgroud)
使用这种方法,我可以访问lua中的结果表,如下所示:
GetParameter("V111","V111Parameter")
printTable(resultTable);
Run Code Online (Sandbox Code Playgroud)
这样做一切顺利,但是,如果不使用setglobal,还有另一种方法吗?我试过做类似的事情:
local mytable=GetParameter("V111","V111Parameter");
Run Code Online (Sandbox Code Playgroud)
但不起作用.使用全局变量更好?如何在不创建setglobal的情况下获取结果表?
提前致谢!
我在Lua中有一个简单的类实现.
test = {}
test.__index = test
function test:new()
local o = {}
setmetatable(o, self)
return o
end
function test:setName(name)
self.name = name
print name
end
local name = test:new()
name:setName("hello")
Run Code Online (Sandbox Code Playgroud)
我运行时不断收到此错误:
lua:test.lua:12:'='预计在'name'附近
我不确定这是什么或为什么会发生这种情况,我们将非常感谢任何帮助.
例如,我以这种方式创建了一个表
myTable = {}
for n=1,5
local item = {
name = "item"..n,
id = n,
}
myTable[n] = item
end
Run Code Online (Sandbox Code Playgroud)
当不再使用此表时,为了为垃圾收集器释放此表,
我是否需要遍历表格以将每个元素分配给nil?
for n=1,5
myTable[n] = nil
end
Run Code Online (Sandbox Code Playgroud)
或者我只需要将表分配给nil?
myTable = nil
Run Code Online (Sandbox Code Playgroud)
如果除了上面的内容之外,如果表元素有一些属性被分配给其他表,我是否也需要单独为它们添加?
for n=1,5
myTable[n].someTable = nil
myTable[n] = nil
end
myTable = nil
Run Code Online (Sandbox Code Playgroud) 我是Lua的新手并且正在寻找互联网我找不到解决问题的方法,或者如果我真的可以做下一件事就给出答案.
我有下一张桌子.如你所见,钥匙有一个í:
DB = {
["Vigía"] = 112
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试从表中检索该值,则返回nil.我尝试删除í字符然后我可以得到值112.
我可以在这种情况下使用拉丁字符作为键吗?
谢谢!
我有这个数组:
a = {{4,2,2,6}, {2,1,1,2}}
Run Code Online (Sandbox Code Playgroud)
如何从该数组中检索索引到C程序?
例如:
a[1] -- {4,2,2,6}
a[1][2] -- 2
Run Code Online (Sandbox Code Playgroud) 这是一个我一直想知道为什么不可能的问题.为什么不能制作完美的克隆功能?Lua 5.3不包含table.copy函数......我假设它处理所有问题/案例.
通过各种克隆函数我的意思是这样的(浅,深,递归等)......
function deep (t) -- deep-copy a table
if type(t) ~= "table" then return t end
local meta = getmetatable(t)
local target = {}
for k, v in pairs(t) do
if type(v) == "table" then
target[k] = clone(v)
else
target[k] = v
end
end
setmetatable(target, meta)
return target
end
function shallow (t) -- shallow-copy a table
if type(t) ~= "table" then return t end
local meta = getmetatable(t)
local target = {}
for k, v in pairs(t) do …Run Code Online (Sandbox Code Playgroud) 我有一个漂亮的小Lua表解析器打印出漂亮的lua代码,我喜欢它...它的工作非常精彩.有一个轻微的障碍...如果我去打印一个具有任何整数键的表或数组,它会使用它来循环pairs(这不会讽刺代码),但我宁愿ipairs在可能的情况下使用它.所以我想知道是否有可能检查一个表(没有实际查看它),如果它可以使用ipairs循环通过它,否则使用对.那么有没有办法开始循环0而不是Lua的默认1?
Lua Table Parser(在谷歌上找到的基本代码,更改它以使其打印更多阵列友好)...
function TableParser(name, object, tabs)
local function serializeKeyForTable(k)
if type(k)=="number" then
return ""
end
if string.find(k,"[^A-z_-]") then
return k
end
return k
end
local function serializeKey(k)
if type(k)=="number" then
if k == 0 then
return "\t[" .. k .."] = "
else
return "\t"
end
end
if string.find(k,"[^A-z_-]") then
return "\t" .. k .. " = "
end
return "\t" .. k .. " = "
end
if not tabs then tabs = …Run Code Online (Sandbox Code Playgroud) 有人可以解释这种明显的疯狂吗?
> t = {1, 2, 3} -- Table length 3. Simple
> = #t
3 -- Yep
> t[3] = nil -- Remove the last element?
> = #t
2 -- Ok it realises it is the last one (since #t = 3) and decrements the length
> t[6] = 6 -- Add a separate element?
> = #t
2 -- Ok... I guess? Although surely it knew #t = 2, and so now #t should be 6?
> …Run Code Online (Sandbox Code Playgroud) 我在使用table.sort函数时遇到了Lua的问题.如果你想说服自己,我写了一个小片段,准备你去测试.
test = {"apple", "Bee", "clown" }
table.sort( test )
for k, v in pairs( test ) do
print( k, v )
end
Run Code Online (Sandbox Code Playgroud)
结果是
1 Bee
2 apple
3 clown
Run Code Online (Sandbox Code Playgroud)
即使我想要的结果看起来像这样
1 apple
2 Bee
3 clown
Run Code Online (Sandbox Code Playgroud)
我已经设法弄清楚这是因为table.sort函数使用默认的"<"运算符,而"B"的ASCII值为66,这显然低于ASCII值"a"或"c" ",分别是97和99.我知道我可以在调用table.sort时应用自定义函数,但我不知道该函数的样子.
此外,除非您以后能够恢复它们,否则不能选择将所有字母设为大写或小写.
任何帮助是极大的赞赏.