linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别
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-面向对象中函数使用时冒号(:)和点(.)的区别相关推荐
- Lua 语言中的点、冒号与self
lua编程中,经常遇到函数的定义和调用,有时候用点号调用,有时候用冒号调用,这里简单的说明一下原理. girl = {money = 200} function girl.goToMarket(gir ...
- python怎么理解函数的参数_理解Python中函数的参数
定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解 ...
- 关于ADAMS中AZ函数使用时的一些心得
今天做仿真时,发现使用AZ函数时的一些注意事项: 一: 其中MARKER_1需要是作用part(或者说受力运动的那个part)上的点,MARKER_33是与作用part相连的那个pa ...
- memmove函数使用时注意的问题
首先,来了解一下memmove函数的声明类型,Linux c中的定义如下: #include <string.h> void *memmove(void *dest, const void ...
- select函数使用时应注意的问题
问题一:fd_set和timeval的重置. select函数的使用一般分为以下几步 1.FD_ZERO(fd_set*); 2.FD_SET(int fd,fd_set*); 3.int selec ...
- Matlab imshow(f,G)函数使用时出现错误
imshow(f,G)使用时出现错误 ① imshow(h,128) 错误使用 imshow>preParseInputs (line 467) IMSHOW 语法无效. 出错 imshow ( ...
- php函数参数中括号,thinkphp手册中函数的可选参数的中括号为什么是包含的关系?...
比如: int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, i ...
- Power BI 中 函数 PERCENTILE.EXC 和 PERCENTILX.EXC 用法区别
一, PERCENTILEX.EXC: 用法: PERCENTILEX.EXC, 不含0和1. 返回在表达式中第 K 个百分比对应的数字 如图 , 二, PERCENTILE.EXC : 不含0和1. ...
- php crc32 作用,php的crc32函数使用时需要注意的问题(不然就是坑)
前几天写了一个分表程序,用的hash算法是crc32.分表的函数如下: 复制代码 代码如下: function _getHash($username) { $hash = crc32($usernam ...
最新文章
- 文本间加入任意字符的PHP函数
- stm32f4 输出pwm波_stm32的pwm输出代码及注释
- asp.net生成jason给js
- 装Oracle10时报错,win10系统安装oracle10g时出现未知错误的详细教程
- 麒麟985曝光!华为Mate 30或首发:标配5G 性能大增
- 通过os中的os.path.basename获取路径中的文件名
- (8)数据结构-循环队列
- python转go_使用Go获取Python版本
- html+css+js实现注册页面
- sql注入的闭合方式
- 光环PMP 串讲课--项目整合管理
- 如何用matlab求出矩阵简化阶梯形顺带算出主元所在的列
- Rust游戏引擎Bevy初探
- xdm,外包能干吗?
- webstrom免安装版
- Flutter | 和小老弟一起玩转Widget
- js中unload什么意思_jQuery - unload事件处理
- Gstreamer基础教程13:Playback Speed
- JAVA个人记账本代码,Java的家庭记账本程序(L)
- 一个服务器可以放几个小程序,一个服务器可以放几个小程序
热门文章
- 吴恩达《机器学习》学习笔记三——多变量线性回归
- 运行Qt程序的一些注意事项
- redis linux服务,linux服务之redis
- C++学习之路 | PTA(甲级)—— 1099 Build A Binary Search Tree (30分)(带注释)(精简)
- 商城报表系统html5,关于html5:推荐这几款主流报表产品
- C10K 非阻塞 Web 服务器
- CoreData 自定义数据类型
- java queue 实现类 区别_Java集合11 (Queue)
- php 跳板机连接mysql,使用python如何通过跳板机连接MySQL数据库
- python3调用java_Python3-JPype调用Java代码