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模块
我有几个问题。
如果Class:new()不做任何事情,它的意义是什么?
在第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)