lua方法点(.)调用和冒号(:)调用区别:

用.定义方法时object.func_name(arg1,arg2...),方法真正的函数签名形式为: object.func_name(arg1, arg2...)
用:定义方法时object:func_name(arg1,arg2...),方法真正的函数签名形式为: object:func_name(self, arg1, arg2...)

使用.调用方法时object.func_name(arg1,arg2...),真正调用方式为:object.func_name(arg1,arg2...)
使用:调用方法时object:func_name(arg1,arg2...),真正调用方式为:object:func_name(self, arg1,arg2...)

定义: object.func_name(arg1,arg2...)
调用: object.func_name(arg1,arg2...)

定义: object:func_name(arg1,arg2...)
调用: object.func_name(object, arg1,arg2...) 或 object:func_name(arg1,arg2...)

代码示例:

function inherit(base, derive)
derive = derive or {}

if type(base) == "table" then
setmetatable(derive, base)
base.__index = base
derive._super = base
end

return derive
end

local base = {x=1}

function base:print()
print("base class", self.y)
end

local derive = inherit(base,{y=2})
function derive:print()
print("derive class")
end

function derive:test()
self._super:print() -- base class nil
self._super.print(self) -- base class 2
self.print() -- derive class
end

derive:test()

posted @ 2016-12-08 00:08  ~逍遥~  阅读(1103)  评论(0)    收藏  举报