lua中点号和冒号在定义方法和调用方法的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Fenglele_Fans/article/details/83650768

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

猜你喜欢

转载自blog.csdn.net/Fenglele_Fans/article/details/83650768