理解Lua中的类

问题描述 投票:0回答:1

我一直在Lua玩弄,想要找出为什么以及如何在Lua中定义“类”时获得“尝试调用字段'副本'(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")
lua
1个回答
4
投票
  1. Lua没有对象或类的概念;它们通常实现为包含函数的表。
  2. 出现这种错误的原因正如它所说:你试图调用nil。你试图打电话的功能,table.copydoes not exist,所以Lua在你试图打电话时抱怨。这是因为:
  3. 如果某些内容未定义,则为nil,这是一个有效的“值”,与C语言不同,其中未定义的变量不存在。但是,无法调用nil,这会导致您的错误。
  4. 在几乎所有情况下,“尝试调用字段X(零值)”应该被读作“尝试调用不存在的函数(X)”,这将是一个更易于理解的错误消息。
  5. 不是将类的内容复制到新实例中,而是在Lua中使用metatables查找其类中对象中不存在的键。有关详细信息,请参阅Programming in Lua
© www.soinside.com 2019 - 2024. All rights reserved.