Lua-面向对象中函数使用时冒号(:)和点(.)的区别,我们先来看一段简单的代码:

local Animal ={}functionAnimal:Eat( food )print("Animal:Eat", self, food)end

functionAnimal.Sleep( time )print("Animal.Sleep", self, time)endAnimal:Eat("grass")

Animal.Eat("grass")

Animal:Sleep(1)

Animal.Sleep(1)

输出结果为:

Animal:Eat table: 0x7f8421c07540 grass

Animal:Eat grassnilAnimal.Sleepniltable: 0x7f8421c07540

Animal.Sleepnil 1

由此可见,

定义:

在Eat(冒号函数)内部有一个参数self,在Sleep(点函数)内部没有参数self;

调用:

用冒号(:)调用函数时,会默认传一个值(调用者自身)作为第一个参数;

用点(.)调用函数时,则没有;

-- 如果要使结果一致,则:

Animal:Eat("grass")

Animal.Eat(Animal,"grass")

Animal:Sleep()

Animal.Sleep(Animal)

输出结果:

Animal:Eat table: 0x7f8421c07540 grass

Animal:Eat table: 0x7f8421c07540 grass

Animal.Sleepniltable: 0x7f8421c07540

Animal.Sleepnil table: 0x7f8421c07540

-- 我们为什么可以用.和:来定义函数

function Animal.Sleep( time ) end

-- 这种写法是一种语法糖(syntactic sugar),它的原型是:

Animal.Sleep = function ( time ) end

用双冒号(:)时,也是一种语法糖,实际上默认传递一个self(Animal)参数:

function Animal:Eat( food ) end

等价于

function Animal.Eat( self, food ) end

可参考Lua函数定义:

http://www.lua.org/manual/5.2/manual.html#pdf-next

3.4.10 – Function Definitions

The syntax for function definition is

functiondef ::= function funcbody

funcbody ::= ‘(’ [parlist] ‘)’ block end

The following syntactic sugar simplifies function definitions:

stat ::= function funcname funcbody

stat ::= local function Name funcbody

funcname ::= Name {‘.’ Name} [‘:’ Name]

The statement

function f () body end

translates to

f = function () body end

The statement

function t.a.b.c.f () body end

translates to

t.a.b.c.f = function () body end

The statement

local function f () body end

translates to

local f; f = function () body end

not to

local f = function () body end

Lua 的详细介绍:请点这里

Lua 的下载地址:请点这里

linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别相关推荐

  1. Lua 语言中的点、冒号与self

    lua编程中,经常遇到函数的定义和调用,有时候用点号调用,有时候用冒号调用,这里简单的说明一下原理. girl = {money = 200} function girl.goToMarket(gir ...

  2. python怎么理解函数的参数_理解Python中函数的参数

    定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解 ...

  3. 关于ADAMS中AZ函数使用时的一些心得

    今天做仿真时,发现使用AZ函数时的一些注意事项: 一:          其中MARKER_1需要是作用part(或者说受力运动的那个part)上的点,MARKER_33是与作用part相连的那个pa ...

  4. memmove函数使用时注意的问题

    首先,来了解一下memmove函数的声明类型,Linux c中的定义如下: #include <string.h> void *memmove(void *dest, const void ...

  5. select函数使用时应注意的问题

    问题一:fd_set和timeval的重置. select函数的使用一般分为以下几步 1.FD_ZERO(fd_set*); 2.FD_SET(int fd,fd_set*); 3.int selec ...

  6. Matlab imshow(f,G)函数使用时出现错误

    imshow(f,G)使用时出现错误 ① imshow(h,128) 错误使用 imshow>preParseInputs (line 467) IMSHOW 语法无效. 出错 imshow ( ...

  7. php函数参数中括号,thinkphp手册中函数的可选参数的中括号为什么是包含的关系?...

    比如: int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, i ...

  8. Power BI 中 函数 PERCENTILE.EXC 和 PERCENTILX.EXC 用法区别

    一, PERCENTILEX.EXC: 用法: PERCENTILEX.EXC, 不含0和1. 返回在表达式中第 K 个百分比对应的数字 如图 , 二, PERCENTILE.EXC : 不含0和1. ...

  9. php crc32 作用,php的crc32函数使用时需要注意的问题(不然就是坑)

    前几天写了一个分表程序,用的hash算法是crc32.分表的函数如下: 复制代码 代码如下: function _getHash($username) { $hash = crc32($usernam ...

最新文章

  1. 文本间加入任意字符的PHP函数
  2. stm32f4 输出pwm波_stm32的pwm输出代码及注释
  3. asp.net生成jason给js
  4. 装Oracle10时报错,win10系统安装oracle10g时出现未知错误的详细教程
  5. 麒麟985曝光!华为Mate 30或首发:标配5G 性能大增
  6. 通过os中的os.path.basename获取路径中的文件名
  7. (8)数据结构-循环队列
  8. python转go_使用Go获取Python版本
  9. html+css+js实现注册页面
  10. sql注入的闭合方式
  11. 光环PMP 串讲课--项目整合管理
  12. 如何用matlab求出矩阵简化阶梯形顺带算出主元所在的列
  13. Rust游戏引擎Bevy初探
  14. xdm,外包能干吗?
  15. webstrom免安装版
  16. Flutter | 和小老弟一起玩转Widget
  17. js中unload什么意思_jQuery - unload事件处理
  18. Gstreamer基础教程13:Playback Speed
  19. JAVA个人记账本代码,Java的家庭记账本程序(L)
  20. 一个服务器可以放几个小程序,一个服务器可以放几个小程序

热门文章

  1. 吴恩达《机器学习》学习笔记三——多变量线性回归
  2. 运行Qt程序的一些注意事项
  3. redis linux服务,linux服务之redis
  4. C++学习之路 | PTA(甲级)—— 1099 Build A Binary Search Tree (30分)(带注释)(精简)
  5. 商城报表系统html5,关于html5:推荐这几款主流报表产品
  6. C10K 非阻塞 Web 服务器
  7. CoreData 自定义数据类型
  8. java queue 实现类 区别_Java集合11 (Queue)
  9. php 跳板机连接mysql,使用python如何通过跳板机连接MySQL数据库
  10. python3调用java_Python3-JPype调用Java代码