【问题标题】:iterating over a table passed as an argument to a function in lua遍历作为参数传递给lua中函数的表
【发布时间】:2015-06-16 12:53:33
【问题描述】:

我正在尝试使用 for _ in pairs() 表示法在函数内迭代表,但如果我键入任何内容,即使是像 print('asdgfafs') 这样的乱码,嵌套在 for 循环中,它也不会被打印出来。代码:

record = {bid1,bid2,bid3}
bid1 = {bidTime = 0.05,bidType = 'native'}
bid2 = {bidTime = 0.1,bidType = 'notNative'}
bid3 = {bidTime = 0.3,bidType = 'native'}

function getBids(rec,bidTimeStart,bidTimeFinish,bidType,numberOfBids)
    wantedBids = {}
    bidCount = 0

    for i,v in pairs(rec) do
        print('asdfasdfasdfa')
        print(i .. ' + ' .. v)
    end
end

getBids(record,0,1,'native',5)

谁能告诉我原因并提出解决方法?

【问题讨论】:

    标签: for-loop lua iterator lua-table


    【解决方案1】:

    您正在创建record创建bid# 表之前。

    所以当您执行record = {bid1, bid2, bid3} 时,尚未创建任何bid# 变量,因此它们都是nil。因此,该行实际上是 record = {nil, nil, nil},显然不会给 record 表提供任何值。

    反转这些行以将record 赋值bid# 变量创建之后。

    【讨论】:

    • 我真是个白痴……你看,我整个星期都在使用 node.js,我忘记了其他语言不是异步的!非常感谢。
    • 这与同步或异步无关。 node.js 中的这种精确代码模式也会失败。在定义变量之前,您不能使用它。然而,在 javascript 中,所有变量定义都被提升,因此 var x; code1; var y; code2; var z 实际上定义了块开头的所有变量。如果您将 local record, bid1, bid2, bid3 添加到此 sn-p 的顶部,它也会出于完全相同的原因而工作。或者,将 var 留在 javascript 之外,它可能会失败(尽管声明的变量提升甚至可能会隐式发生,我不记得临时的)。
    • 哦,我只是假设在 lua 中没有等效于 javascript 的 var 吗?那么 local 相当于 javascript 的 var 吗?
    • 不完全是,但有点像。
    • 如果您想保持这样的顺序,请将record 初始化为空表,但例如将bid# 更改为record.bid#。关于 Lua 中关于 local 的问题,它与 js 中的 var 并不完全相同,但你应该几乎在任何地方都使用local,除非你真的需要“污染”全球空间。使用local 会限制变量的作用域,但你可以预先定义它们并在以后将它们用作上值,或者利用表来扩大它们的作用域。
    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 2013-07-13
    • 2013-08-30
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多