LUA元表和类

  • 本文关键字:LUA lua game-engine
  • 更新时间 :
  • 英文 :

local Class = {}
Class.__index = Class
--default implementation
function Class:new() print("Bye!!") end
--create a new Class type from our base class
function Class:derive(type)
local cls = {}
cls.type = type
cls.__index = cls
cls.super = self
setmetatable(cls, self)
return cls
end
function Class:__call(...)
local inst = setmetatable({},self)
inst:new(...)
return inst
end
function Class:get_type()
return self.type
end

--Create 'Player' class
local Player = Class:derive("Player")
function Player:new(name)
print("hello " .. name)
end
--Create player instance
plyr1 = Player('Dylan')

这是lua中的Class模块

我有几个问题。

  1. 如果Class:new()不做任何事情,它的意义是什么?

  2. 在第19行inst:new(…)在Class:__call(…)函数中,为什么程序在Player表中搜索:new函数而不是原始的Class表?

的意思,当Player("Dylan")被调用时,"Hello Dylan",而不是"再见!!">

不是inst表的元表设置为self,引用类吗?

代码取自youtube视频https://www.youtube.com/watch?v=O15GoH7SDn0关于Lua类

在执行Player("Bob")时,我们将进入Player元表中定义的__call元方法,即Class:__call

function Class:__call(...)
local inst = setmetatable({},self)
inst:new(...)
return inst
end

在这个调用中,self指的是Player而不是Class表,所以当我们创建inst时,我们将它的元表设置为Player,它的__index值指向它自己,所以inst:new将等于Player.new(inst, name)

相关内容

  • 没有找到相关文章

最新更新