理解 Lua 中的类

我一直在 Lua 中探索如何定义“类”,以及为什么在定义“类”时会出现“Attempt to call field 'copy'(nil value)”这样的报错。

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")
点赞
用户4984564
用户4984564
  1. Lua没有对象或类的概念;它们通常被实现为包含函数的表。

  2. 发生错误的原因正如它所说的一样:你试图调用nil。 你试图调用的函数table.copy不存在,因此当你试图调用它时,Lua会报错。这是因为:

  3. 如果某个东西未定义,它就是nil,这是一种有效的“值”,这与像C这样的语言不同,其中未定义的变量就不存在。但是nil无法被调用,这会导致错误。

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

  5. 在Lua中,通常使用元表来查找对象中不存在的键,而不是将类的内容复制到新实例中。请参见《Lua编程》了解更多信息。

2019-02-15 13:00:25