如何将Lua中未知长度的表传递给绑定的C++函数?
我希望能够像这样调用Lua函数:
call_C_Func({1,1,2,3,5,8,13,21})
并将表格内容复制到一个数组(最好是STL矢量)?
我试图比较两个相等长度的表和一个函数,因为我不知道有任何其他方法这样做.但是,使用以下功能,它无法注册,我也不知道为什么.我希望有人可以提供对此问题的深入了解,或者有更好的方法来比较这两个表.
这些表格使用以下代码填充:
str = "parameters determined by program (all digits)"
tableone = {}
for word in str:gmatch("%d") do table.insert(tableone,word) end
两个表都是相同的,当然除了各个表名.表格正确填充,并在打印时正确显示.为了这个问题,这里有两个表:
tableone = {}
tabletwo = {}
for i=1,4 do table.insert(tableone, i) end
for i=1,4 do table.insert(tabletwo, i) end
显然,这两个表将彼此相等.我写的比较索引表的函数如下:
function comparetables(t1, t2)
matchct = 0
 for i=1,#t1 do
    if t1[i] == t2[i] then
    matchct = matchct + 1
    end
if matchct == #t1 then
return true
end
end
我试过了
print(comparetables(tableone,tabletwo))
看它是否打印"真实"但没有运气.对我而言,它似乎应该没有问题.但事实并非如此.我错过了什么?我已经尝试过像某个人可能已经编写的table.compare函数一样的东西,但找不到这样的运气.谢谢你的任何建议!
附加信息:
我正在比较表格的原因是为了一个主人型游戏.这意味着在比较表时必须遵循以下三条规则.我创建的功能是让我开始,以为我可以从那里工作.
例如,使用值{1,3,3,4}的值表和{4,4,3,1}的猜测,它将返回Pcount为2(一个4和1)和一个Ccount为1 (三位在第三位).我认为最困难的部分之一就是要进行比较,以确认猜测中的第二个4不应该增加Pcount.
我想知道table.insert在lua中是如何工作的?!
我问这个是因为我试图在__newindexmetamethod 的自定义表上使用它但似乎没有调用它.有没有办法让我的自定义表功能与table.insert一起使用?!
从我对语言的谦虚知识,我会说它使用类似的rawset东西,或许我不知道.
我工作的样本:
do
    tabl = {1,2,3}
    local _tabl = tabl
    tabl = {}
    local mt = { __newindex = function(t,k,v) print"changing" ;_tabl[k] = v end, __index = _tabl}
    setmetatable(tabl,mt)
end
tabl[4] = 4;    --prints "changing"
table.insert(tabl,5) -- prints nothing!!
基本表,应该如何。但是我需要按功能进行操作,我该怎么做?
local mainMenu = {
  caption = "Main Window",
  description = "test window",
  buttons = {
  { id = 1, value = "Info" },
  { id = 2, value = "Return" },
  { id = 3, value = "Ok" },
  { id = 4, value = "Cancel" }
  },
  popup = true
  }
表应基于外部参数,并为每个选项变量编写一个表-更好的方法。我为此创建了一个函数,它们应该创建标题或描述之类的基本选项并弹出,然后将值插入按钮表(如果启用了选项-添加按钮)。但是这里的问题是,它们不会插入到tmp表,buttons表及其下一个选项的值中。
   function createMenu()
    tmp = {}
    --buttons insert
   if(config.info) then
    table.insert(tmp, {buttons = {id = 1, value = "Info"}});
   elseif(config.return) then
    table.insert(tmp, {buttons = {id = 2, …我很好奇Lua默认table.sort使用什么算法,只是因为它比我遇到的其他一些排序算法慢.如果Lua table.sort是用C语言编写的,或者它是在Lua的库中,我也很好奇.
我有一个新问题,我想知道你是否能够在Lua内做enumartions,我不确定这是否是正确的名称,我能解释的最佳方式是如果我给你看一个例子使用PAWN(如果您知道C类型语言,那将是有意义的).
#define MAX_SPIDERS 1000
new spawnedSpiders;
enum _spiderData {
    spiderX,
    spiderY,
    bool:spiderDead
}
new SpiderData[MAX_SPIDERS][_spiderData];
stock SpawnSpider(x, y)
{
    spawnedSpiders++;
    new thisId = spawnedSpiders;
    SpiderData[thisId][spiderX] = x;
    SpiderData[thisId][spiderY] = y;
    SpiderData[thisId][spiderDead] = false;
    return thisId;
}
这就是它在PAWN中的样子,但我不知道如何在Lua中这样做......这就是我到目前为止所做的.
local spawnedSpiders = {x, y, dead}
local spawnCount = 0
function spider.spawn(tilex, tiley)
    spawnCount = spawnCount + 1
    local thisId = spawnCount
    spawnedSpiders[thisId].x = tilex
    spawnedSpiders[thisId].y = tiley
    spawnedSpiders[thisId].dead = false
    return thisId
end
但显然它会出错,你们中有谁知道这样做的正确方法吗?谢谢!
我已经在这里找到了尽可能多的答案,因为我可以找到我认为足够接近我的问题的标题.我没有看到任何人有我的确切问题,所以我问一个问题,我希望只是我对一个简单的事实一无所知.
我正在尝试编写一个记录HP(int)和距离(boolean)的表,然后按HP排序,只有顶部附近的Range中的那些.
local tableTest = {
    {hp = 64, range = true, name="Frank"},
    {hp = 100, range = true, name="Joe"},
    {hp = 2, range = false, name="Jim"},
    {hp = 76, range = true, name="Tim"},
    {hp = 17, range = false, name="Jill"},
    {hp = 16, range = true, name="Phillip"},
}
-- Sort by HP and Range to find lowest Unit in Range.
table.sort(tableTest, function(x,y) return x.hp < y.hp and x.range end)
for i=1, #tableTest do print(tableTest[i].name, tableTest[i].hp) end
这个输出是:
Phillip 16 …今天,我正在与lua一起工作,使用那个“ oldesh”作为我的语言,并且确实找到了可以将参数作为数组获取的东西,例如soo:
function foo(someting,...)
    local arrayofargs = arg
    -- code here
end
现在,我很吸引人。这可以通过“其他方式”吗?你可以传递数组,而不是数组,而是像参数列表一样传递:
function bar(a1,a2)
    print(a1+a1)
end
function foo(someting,...)
    local arrayofargs = arg
    bar(arg)
end
是的,你不能那样做。但是我可以在家里做点东西吗?
我想按字母顺序排序表.除了数字.
下面的代码显示了如何使用比较器函数对表进行排序:
function( a,b ) return a.N < b.N end
给我:
obj = {
    [1] = {
        ["N"] = "Green 1";
    };
    [2] = {
        ["N"] = "Green 11";
    };
    [3] = {
        ["N"] = "Green 2";
    };
    [4] = {
        ["N"] = "Red 1";
    };
}
但是我希望它像这样排序:
obj = {
    [1] = {
        ["N"] = "Green 1";
    };
    [2] = {
        ["N"] = "Green 2";
    };
    [3] = {
        ["N"] = "Green 11";
    };
    [4] = {
        ["N"] = …我碰到了像这样的桌子,键周围有方括号。我知道使用lua不需要使用lua ..使用方括号时有什么区别吗?
        local commands_json =
        {
            ["request"] = {
                ["application"] = PW_APPLICATION,
                ["push_token"] = deviceToken,
                ["language"] = "en",  --OR: system.getPreference( "ui", "language" ),
                ["hwid"] = system.getInfo("deviceID"),
                ["timezone"] = -3600,  --offset in seconds
                ["device_type"] = deviceType
            }
        }