Lua中“.”調用方法與“:”調用方法的區別
阿新 • • 發佈:2017-06-16
-- name obj oca -s fun str member elf
Lua中“.”調用方法與“:”調用方法的區別:
一、概述
學lua的時候有一個迷惑點,就是搞不清楚‘.’與‘:’調用方法的區別,今天很早就起來看了看一個大牛的視頻講解,才頓悟了:‘.’調用和‘:’實際是傳遞參數的個數不同而已,‘:’實際是一個語法糖。
二、演示
1 require"members" 2 require"player" 3 require"guns" 4 require"function" 5 6 local tom=Player.New() --新建一個tom的 player 7 8 tom.name="Tom" --將tom的名字賦值為"Tom" 9 10 print(tom.name,tom.life) --打印tom的name tom的life 11 12 local doris=Player.New() --新建一個”doris" 的player 13 14 doris.name="Doris" --將doris的名字賦值為“Doris”15 16 for k,v in pairs(Guns) do --在Guns中遍歷attack==20的武器,找到後將tom的武器賦值為v,跳出循環 17 if v.attack==20 then 18 tom.weapon=v 19 break 20 end 21 end 22 23 print("tom‘s weapon :",tom.weapon.name) --打印出“tom‘s weapon:” tom.weapon.name 24 25 --tom -> meta table -> __index -> "Attack" field or method26 --這裏傳遞了兩個參數 tom:Attack(self->doris,var->attack) 27 tom:Attack(doris) --tom:attack(doris) . 和 : 調用有所不同 .只是調用它方法 :調用 還可以訪問到tom本身的屬性 28 29 --這裏傳遞1個參數 tom:Attack(var->attack) 30 tom.Attack1(doris) --tom:attack(doris) . 和 : 調用有所不同 31 print("doris life",doris.life) --打印攻擊完了後doris的生命值
1 Player={} --新建一個player的表 2 3 Player.__index=Player --共享player的數據 4 5 function Player.New() --player的new()方法 6 7 local obj={name="unkown",life=100} 8 9 setmetatable(obj,Player) 10 11 return obj --返回obj={name="unkown",life=100} && plyer的屬性:Attack 12 end 13 14 --這裏的冒號傳遞了兩個參數 Player:Attack(self->tom,var->target) 15 function Player:Attack(target) 16 17 print("attack",target.name) --打印("attack",target.name) 18 19 --this ptr 20 target.life=target.life-self.weapon.attack --目標的生命值=目標生命值-self.weapon.attack self=tom 21 22 end 23 24 25 --這裏的冒號傳遞了一個參數 Player:Attack1(var->target) 26 function Player.Attack1(target) 27 28 print("attack",target.name) --打印("attack",target.name) 29 30 --this ptr 31 target.life=target.life-self.weapon.attack --目標的生命值=目標生命值-self.weapon.attack self=tom 32 33 end
Lua中“.”調用方法與“:”調用方法的區別