【问题标题】:Weird "attempt call field "drawers"(a table value)" error奇怪的“尝试调用字段“抽屉”(表值)”错误
【发布时间】:2016-10-18 21:56:15
【问题描述】:

大约一年前,我从事这个项目。我回到它,现在当我运行它时它会抛出一个错误,错误是“尝试调用字段“抽屉”(一个表值)”。

这是抽屉字段的位置

local Renderer = {}

local num_of_layers = 2
local insert = table.insert
local remove = table.remove


function Renderer:create()
    local render = {}

    render.drawers = {}
    for i  = 0, num_of_layers do
        render.drawers[i] = {}
    end

    function render:addRenderer(obj, layer)
        local l = layer or 0
        insert(self.drawers(l), i, obj)
    end

    return render
end

return Renderer

这是它被调用的地方

local tlm = {}

function tlm:load()
     renderer:addRenderer(self)
     gameloop:addLoop(self)
end

【问题讨论】:

  • 大写的Renderer和小写的renderer有点混淆,而函数Renderer:create实际上并没有结束,从我们的角度来看。能不能把代码写的更清楚一点?
  • 另外,发现了错误。 drawers 实际上是一个包含一些表的表,但您称它为传递 l 作为来自 renderer:addRenderer 的参数。再说一次,我不明白你想做什么。

标签: lua compiler-errors love2d


【解决方案1】:

这是不正确的:

insert(self.drawers(l), obj)

self.drawers 不是函数而是表。因此像self.drawers(1) 这样的函数调用会导致错误。

如果你想使用 Luas 标准函数在索引 l 处的表 self.drawers 中插入一个元素,你应该调用:

table.insert(self.drawers, i, obj)

如果你想替换索引 l 处的值,你可以简单地写self.drawers[l] = obj

http://www.lua.org/manual/5.3/manual.html#pdf-table.insert

【讨论】:

    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2017-06-01
    • 2015-04-28
    • 1970-01-01
    • 2018-03-23
    • 2016-06-21
    相关资源
    最近更新 更多