如何用Lua的table实现类和继承来构建长尾词查询系统?
- 内容介绍
- 文章标签
- 相关推荐
本文共计209个文字,预计阅读时间需要1分钟。
由于只有当读写不存在域时,才会触发__index和__newindex属性classA={className=classA, name=classAInst}function classA: new(newobject) newobject=newobject or {}setmetatable(newobject, {__index=self})-- 当
--因为只有当读写不存在的域时,才会触发__index和__newindex classA = {className = "classA",name="classAInst"} function classA:new(newobject) newobject = newobject or {} setmetatable(newobject, {__index = self})--当在newobject找不到key对应的value时,就到self(即classA)类中查找 return newobject end function inherit(p) local newclass = {className = "classB",parent = p} setmetatable(newclass,{__index=p})--当在newclass中找不到key对应的value时,就到p类中查找 function newclass:new(newobject) newobject = newobject or {} setmetatable(newobject,{__index = newclass})--当在newobject找不到key对应的value时,就到newclass类中查找 return newobject end return newclass end testA = classA:new() print("testA ==> ",testA.className) print("testA ==> ",testA.name) testB = inherit(classA):new({name = "testB"}) print("testB ==> ",testB.className) print("testB ==> ",testB.name) testC = inherit(classA):new() print("testC ==> ",testC.className) print("testC ==> ",testC.name) testD = inherit(testB):new() print("testD ==> ",testD.className) print("testD ==> ",testD.name)
testA ==> classAtestA ==> classAInsttestB ==> classBtestB ==> testBtestC ==> classBtestC ==> classAInsttestD ==> classBtestD ==> testB
本文共计209个文字,预计阅读时间需要1分钟。
由于只有当读写不存在域时,才会触发__index和__newindex属性classA={className=classA, name=classAInst}function classA: new(newobject) newobject=newobject or {}setmetatable(newobject, {__index=self})-- 当
--因为只有当读写不存在的域时,才会触发__index和__newindex classA = {className = "classA",name="classAInst"} function classA:new(newobject) newobject = newobject or {} setmetatable(newobject, {__index = self})--当在newobject找不到key对应的value时,就到self(即classA)类中查找 return newobject end function inherit(p) local newclass = {className = "classB",parent = p} setmetatable(newclass,{__index=p})--当在newclass中找不到key对应的value时,就到p类中查找 function newclass:new(newobject) newobject = newobject or {} setmetatable(newobject,{__index = newclass})--当在newobject找不到key对应的value时,就到newclass类中查找 return newobject end return newclass end testA = classA:new() print("testA ==> ",testA.className) print("testA ==> ",testA.name) testB = inherit(classA):new({name = "testB"}) print("testB ==> ",testB.className) print("testB ==> ",testB.name) testC = inherit(classA):new() print("testC ==> ",testC.className) print("testC ==> ",testC.name) testD = inherit(testB):new() print("testD ==> ",testD.className) print("testD ==> ",testD.name)
testA ==> classAtestA ==> classAInsttestB ==> classBtestB ==> testBtestC ==> classBtestC ==> classAInsttestD ==> classBtestD ==> testB

