Lua中“.”调用方法与“:”调用方法的区别

时间:2022-07-08 12:51:32

Lua中“.”调用方法与“:”调用方法的区别:                                                                                                                        

一、概述

学lua的时候有一个迷惑点,就是搞不清楚‘.’与‘:’调用方法的区别,今天很早就起来看了看一个大牛的视频讲解,才顿悟了:‘.’调用和‘:’实际是传递参数的个数不同而已,‘:’实际是一个语法糖。

二、演示

 require"members"
require"player"
require"guns"
require"function" local tom=Player.New() --新建一个tom的 player tom.name="Tom" --将tom的名字赋值为"Tom" print(tom.name,tom.life) --打印tom的name tom的life local doris=Player.New() --新建一个”doris" 的player doris.name="Doris" --将doris的名字赋值为“Doris” for k,v in pairs(Guns) do --在Guns中遍历attack==20的武器,找到后将tom的武器赋值为v,跳出循环
if v.attack== then
tom.weapon=v
break
end
end print("tom's weapon :",tom.weapon.name) --打印出“tom‘s weapon:” tom.weapon.name --tom -> meta table -> __index -> "Attack" field or method
--这里传递了两个参数 tom:Attack(self->doris,var->attack)
tom:Attack(doris) --tom:attack(doris) . 和 : 调用有所不同 .只是调用它方法 :调用 还可以访问到tom本身的属性 --这里传递1个参数 tom:Attack(var->attack)
tom.Attack1(doris) --tom:attack(doris) . 和 : 调用有所不同
print("doris life",doris.life) --打印攻击完了后doris的生命值
 Player={}                                        --新建一个player的表

 Player.__index=Player                            --共享player的数据

 function Player.New()                            --player的new()方法

     local obj={name="unkown",life=}

     setmetatable(obj,Player)

     return obj                                   --返回obj={name="unkown",life=100} &&  plyer的属性:Attack
end --这里的冒号传递了两个参数 Player:Attack(self->tom,var->target)
function Player:Attack(target) print("attack",target.name) --打印("attack",target.name) --this ptr
target.life=target.life-self.weapon.attack --目标的生命值=目标生命值-self.weapon.attack self=tom end --这里的冒号传递了一个参数 Player:Attack1(var->target)
function Player.Attack1(target) print("attack",target.name) --打印("attack",target.name) --this ptr
target.life=target.life-self.weapon.attack --目标的生命值=目标生命值-self.weapon.attack self=tom end