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

Lua中“.”调用方法与“:”调用方法的区别的更多相关文章

  1. Lua中的元表与元方法学习总结

    前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了"+"符号,就可以进行类的加法运算.在Lu ...

  2. cocos2dx lua中继承与覆盖C++方法

    cocos2dx的extern.lua中的class方法为lua扩展了面向对象的功能,这使我们在开发中可以方便的继承原生类 但是用function返回对象的方法来继承C++类是没有super字段的,这 ...

  3. Lua中的元表与元方法

    [前言] 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理 ...

  4. Lua中的元表和元方法

    Lua中每个值都可具有元表. 元表是普通的Lua表,定义了原始值在某些特定操作下的行为.你可通过在值的原表中设置特定的字段来改变作用于该值的操作的某些行为特征.例如,当数字值作为加法的操作数时,Lua ...

  5. 在Lua中提示UnityEngine.dll的方法

    我的环境 安装最新的 EmmyLua-1.2.1及以上版本 IDEA 2017.1.2 及以上版本 关于EmmlyLua的介绍可查看我之前的文章:Lua代码提示和方法跳转 说明:本文方法摘自 Emmy ...

  6. 在lua中正确使用uuid的方法:

    -- 参考:http://ju.outofmemory.cn/entry/97724local function guid()        local template ="xxxxxxx ...

  7. Lua中使用table实现的其它5种数据结构

    Lua中使用table实现的其它5种数据结构 lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础,如:数组,记录,链表,队列等都可以用它来表示. 1.数组 在lua中,table ...

  8. Lua中的环境概念

    [前言] Lua将其所有的全局变量保存在一个常规的table中,这个table称为“环境”.这种组织结构的优点在于,其一,不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现:另一个优点 ...

  9. 关于LUA中的随机数问题

    也许很多人会奇怪为什么使用LUA的时候,第一个随机数总是固定,而且常常是最小的那个值,下面我就简要的说明一下吧,说得不好,还请谅解.我现在使用的4.0版本的LUA,看的代码是5.0的,呵呵 LUA4. ...

  10. lua学习:lua中“类”的实现

    在之前的面试遇到考用lua实现类的题目.现在就补补这块知识点. 我们都知道Lua中的table是一个对象.拥有状态,拥有self,拥有独立于创建者和创建地的生命周期. 一个类就是一个创建对象的模具.L ...

随机推荐

  1. mybatis-plus 学习笔记

    一.首先是POM <dependencies> <dependency> <groupId>org.springframework.boot</groupId ...

  2. 阶段性总结(PHP-Array函数)

    PHP 5 Array 函数 PHP Array 简介 PHP Array 函数允许您访问并操作数组. 支持简单的数组和多维数组. 详情见下表: 函数 描述 array() 创建数组. array_c ...

  3. 如何查看与分析IIS服务器日志?

    发布时间:2012-12-01 16:17:28.0 作者:青岛做网站   网站日志分析是站长每天的必备工作之一,服务器的一些状况和访问IP的来源都会记录在IIS日志中,所以IIS日志对每个服务器管理 ...

  4. redis 创建集群时 出现的错误解决方式

    1. 创建集群时报以下错误 (1)错误1 ./redis-trib.rb create --replicas 1 XXXXXX:5301 XXXXXX:5302 XXXXXX:5303 XXXXXX: ...

  5. leetcode508

    /** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...

  6. sql开启xp_cmdshell

    sql开启xp_cmdshell sp_configure reconfigure go sp_configure reconfigure go

  7. flutter android keystore

      keytool -genkey -v -keystore E:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key     k ...

  8. 强大的vim配置文件,让编程更随意 (转载)

    花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主要有以下优点: 1.按F5可以直接编译并执行C.C++.java代码以及执行shell脚本,按“F8”可进行C.C++代码的调试 2. ...

  9. Elasticsearch-PHP 搜索操作

    搜索操作 好吧,这不叫elasticsearch的不劳而获!让我们来谈谈PHP客户端中的搜索操作. 客户端允许你通过REST API访问所有的查询和公开的参数,尽可能的遵循命名规则.让我们来看一些例子 ...

  10. MySQL篇之Navicat可视化工具

    主要内容: Navicat工具的介绍和使用 1.介绍和下载安装 <1>介绍 Navicat是一款针对MySQL数据库开发的可视化管理工具,以图形界面的形式操作MySQL数据库. 但在生产环 ...