理解Lua中的类

理解Lua中的类,lua,Lua,我一直在Lua中玩,想知道为什么以及如何在Lua中定义“类”时“尝试调用字段‘copy’(nil value)” Lua没有对象或类的概念;它们通常被实现为包含函数的表 该错误的原因正是它所说的:您正试图调用nil。 您正试图调用的函数,table.copy,因此当您试图调用它时,Lua会抱怨。这是因为: 如果某个变量未定义,则它是nil,这是一个有效的“值”,与C语言不同,C语言中不存在未定义的变量nil,这会导致错误 在几乎所有情况下,“尝试调用字段X(nil值)”应理解为“尝试调用不存在的

我一直在Lua中玩,想知道为什么以及如何在Lua中定义“类”时“尝试调用字段‘copy’(nil value)”

  • Lua没有对象或类的概念;它们通常被实现为包含函数的表

  • 该错误的原因正是它所说的:您正试图调用nil。 您正试图调用的函数,
    table.copy
    ,因此当您试图调用它时,Lua会抱怨。这是因为:

  • 如果某个变量未定义,则它是
    nil
    ,这是一个有效的“值”,与C语言不同,C语言中不存在未定义的变量<但无法调用code>nil,这会导致错误

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

  • 在Lua中,通常使用查找类内对象中不存在的键,而不是将类的内容复制到新实例中。有关这方面的更多信息,请参阅

  • Lua没有对象或类的概念;它们通常被实现为包含函数的表

  • 该错误的原因正是它所说的:您正试图调用nil。 您正试图调用的函数,
    table.copy
    ,因此当您试图调用它时,Lua会抱怨。这是因为:

  • 如果某个变量未定义,则它是
    nil
    ,这是一个有效的“值”,与C语言不同,C语言中不存在未定义的变量<但无法调用code>nil,这会导致错误

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

  • 在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")