lua 点号"."和冒号":"、"seif"使用及区别

网上帖子太多了,看了好多,真是剪不断,理还乱。。。。

先说明一下self是在使用冒号":"是才有的关键字,就是说点号"."不起作用。

先上代码:

tab={
value="第一个值"

}

--现在我们想通过方法打印tab的valua值

function tab.pr(t)     --在tab中定义点号的方法pr()

print(t.value);

end

--然后我们调用方法

tab.pr(tab);     --要传入参数

输出:

第一个值


调用tab的方法pr()并将tab参数传进去

这样写不够简练,可以将参数省略,即使用冒号

改写方法为冒号。

function tab:pr()   --在tab中定义冒号的方法pr()

print(self.value);     --不需要传入参数,使用冒号将会自动传入包含pr()方法的tab,并必须通过self接受(self只有使用冒号时才是关键字

end

然后我们调用方法

tab:pr() 

输出:

上面效果都是一样的。只不过一个是传入参数(包含pr()方法的tab),一个使用默认隐藏参数(包含pr()方法的tab)



上面出现self关键字,下面我将说明self的使用和点号和冒号的混合使用以帮助更好的理解


一.使用冒号方法调用调号方法

先上代码:

tab={
value="第一个值"

}

function tab.pr(t)     --在tab中定义点号的方法pr()

print(t.value);

end


--现在我们使用冒号调用此方法

tab:pr();  --不需要传入tab,使用冒号调用点号方法(tab.pr(t))时,冒号调用方法(tab:pr())会将默认值(tab)传入点号方法(tab.pr(t))的 第一个参数(点号方法tab.pr(t)的第一个参数名可以随便起,你也可以使用self为参数如tab.pr(self),但是在点号方法中他不是关键字,只有在冒号方法里,才是关键字)

输出

第一个值


下面修改print的传入参数t为self

tab={
value="第一个值"

}

function tab.pr(t)     --在tab中定义点号的方法pr()

print(self.value);

end


--现在我们使用冒号调用此方法

tab:pr();

此时将会报错,因为self在点号方法中不是关键字,上面我已经解释。



二.使用点号方法调用冒号方法

tab={
value="第一个值"

}

function tab:pr()     --在tab中定义冒号的方法pr()

print(self.value);

end


--现在我们使用点号调用此方法

tab.pr(tab);   此时必须传入参数,不要以为冒号方法没有参数,点号方法调用就不用传入参数了,冒号参数只是隐藏,并不是没有。

再看:

tab={
value="第一个值"

}

function tab:pr()     --在tab中定义冒号的方法pr()

print(self.value);

end


--现在我们使用点号调用此方法

tab.pr();

此时报错,因为点号调用没有传入参数。冒号中的self将默认为nil,所以报错


当然如果冒号方法没有使用self关键字,点号方法就不用传入参数

tab={
value="第一个值"

}

function tab:pr()     --在tab中定义冒号的方法pr()

print(tab.value);

end


--现在我们使用点号调用此方法

tab.pr();

tab={
value="第一个值"

}

function tab:pr()     --在tab中定义冒号的方法pr()

print(tab.value);

end


--现在我们使用点号调用此方法

tab.pr();


需要注意的是,点号方法调用冒号方法时,参数可以是非包含此方法的table的其他任意参数,self调用的是传入的第一个参数

other={
aa="第一个值"

}

function tab:pr()     --在tab中定义冒号的方法pr()

print(self.aa);

end

tab.pr(other);---非包含此方法的table的其他任意参数






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值