• 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
  • 相关阅读:
    springCloud 服务间相互调用
    不同环境下整合相同格式的文件
    Linux 安装mysql
    利用Maven打War包引入本地Jar包
    linux服务器部署项目详细步骤
    DM数据库导入dmp文件报大小写敏感问题解决办法
    synchronized 实现过程
    TypeScript学习笔记
    @RequestMapping注解详解
    常用的Linux命令
  • 原文地址:https://www.cnblogs.com/muyuqianshan/p/7025651.html
Copyright © 2020-2023  润新知