标签: lua-table

动态分配表变量?

在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".

variables lua lua-table

3
推荐指数
1
解决办法
347
查看次数

从lua返回一个没有全局的表到C

我在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的情况下获取结果表?

提前致谢!

c++ variables lua global lua-table

3
推荐指数
1
解决办法
535
查看次数

Lua课不起作用

我在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'附近

我不确定这是什么或为什么会发生这种情况,我们将非常感谢任何帮助.

lua metatable lua-table

3
推荐指数
1
解决办法
136
查看次数

在Lua中,我应该在不使用时将所有表元素分配给nil吗?

例如,我以这种方式创建了一个表

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 garbage-collection memory-leaks lua-table

3
推荐指数
1
解决办法
360
查看次数

表中的Lua拉丁字符

我是Lua的新手并且正在寻找互联网我找不到解决问题的方法,或者如果我真的可以做下一件事就给出答案.

我有下一张桌子.如你所见,钥匙有一个í:

DB = {
    ["Vigía"] = 112
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试从表中检索该值,则返回nil.我尝试删除í字符然后我可以得到值112.

我可以在这种情况下使用拉丁字符作为键吗?

谢谢!

lua lua-table

3
推荐指数
1
解决办法
138
查看次数

使用Lua C Api从索引获取数组值

我有这个数组:

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)

c lua lua-api lua-table

3
推荐指数
1
解决办法
1549
查看次数

Lua:完美的克隆功能,为什么不呢?

这是一个我一直想知道为什么不可能的问题.为什么不能制作完美的克隆功能?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 clone lua-table

3
推荐指数
1
解决办法
778
查看次数

Lua:检查表是否可以通过ipairs和ipairs从0开始循环

我有一个漂亮的小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)

lua parsing integer lua-table

3
推荐指数
2
解决办法
973
查看次数

Lua的表长度运算符如何工作?

有人可以解释这种明显的疯狂吗?

> 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)

lua luajit lua-table

3
推荐指数
1
解决办法
1401
查看次数

Lua:对具有不同外壳的String数组进行排序

我在使用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时应用自定义函数,但我不知道该函数的样子.

此外,除非您以后能够恢复它们,否则不能选择将所有字母设为大写或小写.

任何帮助是极大的赞赏.

arrays sorting lua lua-table

3
推荐指数
1
解决办法
843
查看次数