Lua中“.”调用方法与“:”调用方法的区别
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中“.”调用方法与“:”调用方法的区别的更多相关文章
- Lua中的元表与元方法学习总结
前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了"+"符号,就可以进行类的加法运算.在Lu ...
- cocos2dx lua中继承与覆盖C++方法
cocos2dx的extern.lua中的class方法为lua扩展了面向对象的功能,这使我们在开发中可以方便的继承原生类 但是用function返回对象的方法来继承C++类是没有super字段的,这 ...
- Lua中的元表与元方法
[前言] 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理 ...
- Lua中的元表和元方法
Lua中每个值都可具有元表. 元表是普通的Lua表,定义了原始值在某些特定操作下的行为.你可通过在值的原表中设置特定的字段来改变作用于该值的操作的某些行为特征.例如,当数字值作为加法的操作数时,Lua ...
- 在Lua中提示UnityEngine.dll的方法
我的环境 安装最新的 EmmyLua-1.2.1及以上版本 IDEA 2017.1.2 及以上版本 关于EmmlyLua的介绍可查看我之前的文章:Lua代码提示和方法跳转 说明:本文方法摘自 Emmy ...
- 在lua中正确使用uuid的方法:
-- 参考:http://ju.outofmemory.cn/entry/97724local function guid() local template ="xxxxxxx ...
- Lua中使用table实现的其它5种数据结构
Lua中使用table实现的其它5种数据结构 lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础,如:数组,记录,链表,队列等都可以用它来表示. 1.数组 在lua中,table ...
- Lua中的环境概念
[前言] Lua将其所有的全局变量保存在一个常规的table中,这个table称为“环境”.这种组织结构的优点在于,其一,不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现:另一个优点 ...
- 关于LUA中的随机数问题
也许很多人会奇怪为什么使用LUA的时候,第一个随机数总是固定,而且常常是最小的那个值,下面我就简要的说明一下吧,说得不好,还请谅解.我现在使用的4.0版本的LUA,看的代码是5.0的,呵呵 LUA4. ...
- lua学习:lua中“类”的实现
在之前的面试遇到考用lua实现类的题目.现在就补补这块知识点. 我们都知道Lua中的table是一个对象.拥有状态,拥有self,拥有独立于创建者和创建地的生命周期. 一个类就是一个创建对象的模具.L ...
随机推荐
- 5月17日上课笔记-js面向对象
二.js面向对象 js创建对象: var 对象名称 = new Object(); person.name = "小明"; //姓名 person.age = 18; person ...
- web前端 ajax加载动态生成复选框demo
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 深入浅出 Java Concurrency (10): 锁机制 part 5 闭锁 (CountDownLatch)
此小节介绍几个与锁有关的有用工具. 闭锁(Latch) 闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态.通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻 ...
- Java--神奇的hashcode
一.Object的HashCode定义 public native int hashCode(); Object类的hashCode方式使用了native修饰也就意味着真正的实现调用的其他语言编写的方 ...
- 禁用Java JDK的自动更新
- (halcon) derivate_vector_field
derivate_vector_field: Convolve a vector field with derivatives of the Gaussian 用高斯导数卷积向量场 derivate_ ...
- 【308】Python os.path 模块常用方法
参考:Python os.path 模块 参考:python3中,os.path模块下常用的用法总结 01 abspath 返回一个目录的绝对路径. 02 basename 返回一个目录的基名 ...
- 通过Curl 对url进行encode操作
最近做项目的时候,通过 Gflags Reload 时候 发现对于某些value中包含=%中文等字符的支持不够好,value被截断了. 经过分析后,发现程序对url切分是用=&为标准的,如果v ...
- 获取web.xml配置文件中的初始化值
TestServletConfig.java package com.huawei.config; import java.io.IOException;import java.util.Enumer ...
- 读书笔记 Week7 2018-4-24
<程序员的自我修养> 首先来大致说一下读这本书的感觉,可以说对于我自己而言,是第一次对于编程有了个纯粹的认识,或者说的更明确一点,是对整个操作系统有了一个大致的感觉.虽然自己这一年也算是写 ...