Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Lua-面向对象中函数使用时冒号(:)和点(.)的区别

Lua-面向对象中函数使用时冒号(:)和点(.)的区别,我们先来看一段简单的代码:local Animal = {}function Animal:Eat( food )print("Animal:Eat", self, food)endfunction Animal.Sleep( time )print("Animal.Sleep", self, time)endAnimal:Eat("grass")Animal.Eat("grass")Animal:Sleep(1)Animal.Sleep(1)输出结果为:Animal:Eat table: 0x7f8421c07540 grassAnimal:EatgrassnilAnimal.Sleepniltable: 0x7f8421c07540Animal.Sleepnil1由此可见,
定义:
在Eat(冒号函数)内部有一个参数self,在Sleep(点函数)内部没有参数self;
调用:
用冒号(:)调用函数时,会默认传一个值(调用者自身)作为第一个参数;
用点(.)调用函数时,则没有;

-- 如果要使结果一致,则:Animal:Eat("grass")Animal.Eat(Animal,"grass")Animal:Sleep()Animal.Sleep(Animal)输出结果:Animal:Eattable: 0x7f8421c07540grassAnimal:Eattable: 0x7f8421c07540grassAnimal.Sleepniltable: 0x7f8421c07540Animal.Sleepniltable: 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 isfunctiondef ::= function funcbodyfuncbody ::= ‘’ [parlist] ‘’ block endThe following syntactic sugar simplifies function definitions:stat ::= function funcname funcbodystat ::= local function Name funcbodyfuncname ::= Name {‘.’ Name} [‘:’ Name]The statement function f () body endtranslates to f = function () body endThe statement function t.a.b.c.f () body endtranslates to t.a.b.c.f = function () body endThe statement local function f () body endtranslates to local f; f = function () body endnot to local f = function () body end
Lua 语言 15 分钟快速入门 http://www.linuxidc.com/Linux/2013-06/86582.htmLua程序设计(第2版)中文 PDF http://www.linuxidc.com/Linux/2013-03/81833.htmLua程序设计(第二版)阅读笔记 http://www.linuxidc.com/Linux/2013-03/81834.htmNetBSD 将支持用 Lua 脚本开发内核组件 http://www.linuxidc.com/Linux/2013-02/79527.htmCentOS 编译安装 Lua LuaSocket http://www.linuxidc.com/Linux/2011-08/41105.htmProgramming In Lua 高清PDF中文版  http://www.linuxidc.com/Linux/2015-05/117362.htm如何配置一套优雅的Lua开发环境  http://www.linuxidc.com/Linux/2015-10/124397.htmLua 的详细介绍:请点这里
Lua 的下载地址:请点这里本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/134432.htm