(lua工程师的精神状态普遍堪忧......)
冒号“:”的用法,和“.”的区别
冒号在定义方法或者调用方法的时候使用。
和“.”定义或者调用方法的不同在于,“:”传参的时候会把self放在第一位传进去。
比如,现在表_tab有一个方法,如下:
_tab = {}
function _tab.f1(num1,num2)
print(num1,num2)
end
如果用“.”调用方法,分别少传一个参,正好传两个参,以及多传参,有如下效果:
_tab.f1(1) --输出1 nil
_tab.f1(1,2) --输出1 2
_tab.f1(1,2,3) --输出1 2
如果用“:”调用方法,分别少传两个参,少传一个参,正好传两个参,以及多传一个参,就有如下效果:
_tab:f1() --输出table: 00D09DD8 nil
_tab:f1(1) --输出table: 00D09DD8 1
_tab:f1(1,2) --输出table: 00D09DD8 1
_tab:f1(1,2,3) --输出table: 00D09DD8 1
这是因为使用“:”时,
第一条语句就相当于用“.”只传了_tab;
第二条语句就相当于用“.”依次传了_tab和1;
第三条语句就相当于用“.”依次传了_tab和1和2(多传了一个参);
第四条就相当于多传了两个参。