首页 > 解决方案 > 理解 Lua 中的类

问题描述

我一直在 Lua 中玩耍,以了解在 Lua 中定义“类”时为什么以及如何获得“尝试调用字段'副本'(零值)”。

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. Lua 没有对象或类的概念;它们通常实现为包含函数的表。

  2. 该错误的原因正如它所说的那样:您试图调用 nil。您尝试调用的函数table.copy,不存在,因此当您尝试调用它时 Lua 会抱怨。这是因为:

  3. 如果某些东西是未定义的,它就是nil,这是一个有效的“值”,不像在像 C 这样的语言中,未定义的变量根本不存在。nil但是不能调用,这会导致您的错误。

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

  5. 不是将类的内容复制到新实例中,而是在 Lua 中使用元表来查找在其类中的对象中不存在的键。有关这方面的更多信息,请参阅在 Lua 中编程。


推荐阅读