local a = {x=2}
--[[function a.foo1(b)
self.x = b
end
a.foo1(5)
print(a.x) --报错:attempt to index global 'self' (a nil value)]]
--[[function a.foo2(self,b) --用点号定义方法
self.x = b
end
a.foo2(a,5) --用点号调用方法
print(a.x) --输出 5]]
--[[function a.foo3(self,b) --用点号定义方法
self.x=b
end
a:foo3(6) --用冒号调用方法
print(a.x) --输出6]]
--[[function a:foo4(b) --用冒号定义方法
self.x=b
end
a.foo4(a,7) --用点号调用
print(a.x) --输出 7]]
--[[function a:foo5(b) -- 用冒号定义方法
self.x=b
end
a:foo5(8) --用冒号调用方法
print(a.x) -- 输出 8]]
function a:foo6(self,b) --用冒号定义方法也传入了self参数
self.x =b
end
a:foo6(8) --报错
a:foo6(a,8) --不报错
print(a.x)
--冒号的作用就是:定义函数时,给函数的添加隐藏的第一个参数self(这样函数体内有self才不会报错);
--调用函数时,默认把当前调用者作为第一个参数传递进去
.......
--使用了冒号之后,就相当于我们刚刚使用点号时一样,
--只是我们不再需要显式地定义self参数以及在调用时主动地传递参数(调用者)
t={x=1}
function t.foo(a)
print(a.x)
end
local a = {x=2}
print(t.foo(a)) --输出2
--print(t:foo()) --输出1
--print(t:foo(a)) --输出1