了解Lua中的课程

时间:2019-02-15 04:36:03

标签: lua

我一直在Lua闲逛,以查找为什么以及如何在Lua中定义“类”时得到“试图调用字段'copy'(nil值)”。

local factionClass = {}
factionClass.Name = "throwaway"

function factionClass:New(name)
    local newFaction = table.Copy(factionClass)
    if name then
        newFaction.Name = name
    end
    return newFaction
end

factionCoolguys = Faction("cool guys")

1 个答案:

答案 0 :(得分:4)

  1. Lua没有对象或类的概念;它们通常以包含函数的表的形式实现。

  2. 该错误的原因与它所说的完全一样:您正在尝试调用nil。 您尝试调用的函数table.copydoes not exist,因此Lua在尝试调用该函数时会抱怨。这是因为:

  3. 如果未定义内容,则为nil,它是有效的“值”,与C之类的语言不同,C语言中不存在未定义的变量。尽管nil无法调用,这会导致您出错。

  4. 在几乎所有情况下,“尝试调用字段X(无值)”应理解为“尝试调用不存在的函数(X)”,这将是更易于理解的错误消息。

  5. 不是将类的内容复制到新实例中,而是在Lua中使用metatables查找类中对象中不存在的键。有关更多信息,请参见Programming in Lua