边写边错,边错边改,边改变搜,再改,改出了些心得。可能会有错误,多包涵,接受批评。
1 ---Base.lua 2 3 Base = {} 4 5 Base.__index = Base 6 Base.value = nil 7 8 function Base:new(_value) 9 local _t = {} 10 setmetatable(_t, Base) 11 _t.value = _value 12 return _t 13 end
1 ---Children.lua 2 require("Base") 3 Children = {} 4 5 setmetatable(Children, Base) 6 Children.__index = Children 7 Children.type = nil 8 9 function Childeren:new(_value,_type) 10 local _c = Base:new(_value) 11 setmetatable(_c, Children) 12 _c.type = _type 13 return _c 14 end
Base.lua 是基类,Children.lua 是继承Base.lua的子类,可能大家习惯了C++,我转下
1 --- .h 2 3 class Base 4 { 5 public: 6 void setValue(_value) 7 int value; 8 } 9 10 --- .cpp 11 Base::setValue(_value) 12 { 13 value = _value; 14 } 15 16 main() 17 { 18 Base* b = new Base(); 19 cout << b.value << endl; 20 }
这里的 b 和 上面的 _t,我认为是一样的,都是一个对象,_t 是 table 类型的,
_t.value 就像 b.value.
setmetatable(Children,Base): 将 Childeren 的元表设置为 Base ,
setmetatable(_c, Children) : 将 _c 的元表设置为 Children,
举个例子吧:
_c : 儿子 Children :爸爸 Base : 爷爷
儿子 想买一个玩具,若 : 1. 自己有钱,直接买,获得到玩具
2. 自己没钱,去搜索 爸爸 的裤兜,若有钱,获得到钱,买玩具
3. 自己没钱,去搜索 爸爸 的裤兜,若没有钱,去搜索 爷爷 的裤兜,若有钱,获得到钱,买玩具, 若没钱, 两手空空,只能是 nil
类方法也是如此。