当前位置: 首页 > news >正文

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 的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

相关文章:

  • linux执行计划步骤,linux下定时执行计划任务(Scheduled execution tasks under Linux).doc...
  • linux下跑酷游戏编程,【Unity3D开发小游戏】《跑酷小游戏》Unity开发教程
  • c语言中实型变量的三种类型,在C语言中实型变量分为两种类型.doc
  • 如何用c语言输出1 11 111,C语言练习1-11.doc
  • c语言 出库入库软件,终于把栈的实现库遍好了(C语言也可以用哦)
  • 数列极差问题c语言源代码,数列极差问题
  • c语言 输出链表函数,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...
  • android编程歌词显示,Android 音乐播放器实现歌词显示
  • android 代码 drawable,Android 通过DrawableInflater加载自定义Drawable
  • Android ui 单元测试 覆盖率,Android单元测试/Ui测试+JaCoCo覆盖率统计
  • android高德地图用地址获取经纬度,高德地图API-获取位置信息的经纬度
  • android notification 的总结分析,Android中Notification用法实例总结
  • 鸿蒙与微信小程序,从微信小程序到鸿蒙JS开发-页面路由
  • android 照片变油画,最近很火照片变油画Glaze软件
  • 华为mteo30用鸿蒙吗,华为mate50渲染图来了!真全面屏+高通芯+鸿蒙,这颜值确实不一般...
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Git 使用集
  • js继承的实现方法
  • js面向对象
  • Laravel核心解读--Facades
  • vue 配置sass、scss全局变量
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 码农张的Bug人生 - 见面之礼
  • 使用agvtool更改app version/build
  • 网络应用优化——时延与带宽
  • 问题之ssh中Host key verification failed的解决
  • 栈实现走出迷宫(C++)
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #ifdef 的技巧用法
  • $(selector).each()和$.each()的区别
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (4.10~4.16)
  • (5)STL算法之复制
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (六)Hibernate的二级缓存
  • (全注解开发)学习Spring-MVC的第三天
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)创业的注意事项
  • (转)关于pipe()的详细解析
  • ****Linux下Mysql的安装和配置
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET企业级应用架构设计系列之技术选型
  • .NET中两种OCR方式对比
  • .py文件应该怎样打开?
  • [Angularjs]ng-select和ng-options
  • [Big Data - Kafka] kafka学习笔记:知识点整理
  • [C/C++] C/C++中数字与字符串之间的转换