在看lua仿单继承
--lua仿单继承 Account = { balance = 0} --对于成员变量,第一此访问要使用元表中的,在第一次也赋值到自己的域中了 --将不涉及到__index了 function Account:new(o) o = o or {} --setmetatable看到后面,忘了这个啥意思了 --如a+b,当lua试图对两个表进行相加时,他会检查两个表是否有一个表有metatable, --如果知道检查到元表有__add域,如果有直接调用__add方法 setmetatable(o, self)--Account表本身作为o的metatable,不设置元表,他到哪儿去查找元方法呢 --当调用self没有的成员时到self里面查找 self.__index = self--自己作为自己的原型 return o end function Account:deposit(v) self.balance = self.balance + v end function Account:withdraw(v) if v > self.balance then print("insufficient funds") end self.balance = self.balance - v end SpecialAccount = Account:new()--从Account继承所有操作 --重定义父类的withdraw函数因为他在本对象中就找到了此方法 function SpecialAccount:withdraw(v) if v - self.balance >= self:getLimit() then print("insufficient funds") end self.balance = self.balance - v end function SpecialAccount:getLimit() return self.limit or 0 end SpecialAccount = Account:new()--SpecialAccount此时将Account设置成了元表,SpecialAccount有了Account的所有的成员 --此时SpecialAccount的域limit的值已经是1000 s = SpecialAccount:new{limit = 1000.00}--s继承SpecialAccount有SpecialAccount所有的成员,SpecialAccount继承Account s:withdraw(200.00) s:deposit(100.00)
吗的真不好理解,太绕了