Lua-面向对象中函数使用时冒号(:)和点(.)的区别
2017-11-02 10:01
399 查看
新人一直没弄明白这个看到这个贴感觉很有用
先看代码
local Animal = {}
function Animal:Eat( food )
print("Animal:Eat", self, food)
end
function Animal.Sleep( time )
print("Animal.Sleep", self, time)
end
Animal:Eat("grass")
Animal.Eat("grass")
Animal:Sleep(1)
Animal.Sleep(1)
输出结果
定义:
在Eat(冒号函数)内部有一个参数self,在Sleep(点函数)内部没有参数self;
调用:
用冒号(:)调用函数时,会默认传一个值(调用者自身)作为第一个参数;
用点(.)调用函数时,则没有;
-- 如果要使结果一致,则:
输出结果:
-- 我们为什么可以用.和:来定义函数
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
详情看此链接http://www.cnblogs.com/zzya/p/5778119.html
先看代码
local Animal = {}
function Animal:Eat( food )
print("Animal:Eat", self, food)
end
function Animal.Sleep( time )
print("Animal.Sleep", self, time)
end
Animal:Eat("grass")
Animal.Eat("grass")
Animal:Sleep(1)
Animal.Sleep(1)
输出结果
Animal:Eat table: 0x1cfc720 grass Animal:Eat grass nil Animal.Sleep nil table: 0x1cfc720 Animal.Sleep nil 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.Sleep nil table: 0x7f8421c07540 Animal.Sleep nil 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
详情看此链接http://www.cnblogs.com/zzya/p/5778119.html
相关文章推荐
- 在 slua 中使用更新的面向对象方案
- PHP面向对象中this,self,parent区别和使用
- lua 面向对象使用
- lua 点号"."和冒号":"、"seif"使用及区别
- Javascript中调用一个函数(对象),使用new或者直接调用有什么区别?
- 黑马程序员-我的第六篇学习日记:OC方法的使用,对象方法与函数的区别
- 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为(转)
- lua--面向对象使用middleclass
- 面向对象---使用面向对象写函数
- javascript 中使用变量存储的函数与不使用变量存储的函数的加载区别,以及其中this对象的区别
- 面向对象的程序设计学习笔记-19-静态成员函数的使用
- cocos2d tolua C++对象使用lua对象的变量,函数
- 静态函数里定义的变量,不为所有对象共享,类的静态变量和类外全局变量区别,静态函数和普通函数区别
- 面向过程、基于对象、面向对象,到底有什么区别?
- 面向对象与面向过程的区别
- java和c++在面向对象上有什么区别?
- CG学习(2)——CG的基本语法及核心函数的面向对象简单封装
- 函数对象的使用
- 面向对象多态的实现(抽象类Abstract和接口Interface的用法区别)
- js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称