Lua中“.”調用方法與“:”調用方法的區別


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 method
26 --這里傳遞了兩個參數  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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM