lua 中冒号和点号的区别

理解Lua冒号区别及适用场合 Lua冒号的应用在函数的定义调用这两种场合可以互相替换,抛砖引玉,先给出Lua5.3参考手册对于冒号区别的解释,例子略有简化: 函数的定义:冒号语法可以用来定义方法, 就是说,函数可以有一个隐式的形参self。 因此,如下语句 function f(params) body end是这样一种写法的语法糖function f(self, params) body end ... 阅读详情

lua 中冒号和点号的区别:

一、定义方法的区别
1、冒号定义方法,默认会接受self参数;而点号定义的时候,默认不会接受self参数
例:

(1)冒号定义

function class:test()

  --这里会接受self参数,比如

  print(self.a,self.b)

  在这里self就是class对象本身,因此不会出错

end

(2)点号定义

function class.test()

  --点号定义时,默认不会接受self参数,因此在这里用self会出错,找不到全局变量self,当然如果你把self定义成了一个全局变量的话。。。那么你赢了。。

  print(self.a,self.b)--报错,找不到全局变量self

end

二、调用方法的区别

1、冒号调用方法,会默认地将对象本身(self)传递给方法;而点号调用则不会

例1:冒号定义

function class:test()  

  print(self.a,self.b)

end

(1)冒号调用:class:test(),这时候在test方法是可以使用self的,因为默认会将self传递给test方法

(2)点号调用:class.test(),这时候在test方法中使用self就会报错了,因为self并没有被传递给test方法,那么要怎么在test方法中使用self呢?其实也简单,把class对象传递过去就好了,如:class.test(class)

例2:点号定义

function class.test()

  print(self.a,self.b)

end

(1)冒号调用:class:test(),这时会报错,这里虽然冒号调用会把self传递过去,但是点号定义方法不接受self啊,所以会报错。想要用就只能显式地接受参数了,方法重新定义一下:function class.test(self) print(self.a) end

这样,冒号调用的时候默认把对象本身传递给方法了,方法也接受了这个参数,这就对了,参数self的名字可以改变,function class.test(tt) print(tt.a,tt.b) end

(2)点号调用:class.test(),定义的时候没有接受参数,调用的时候又没有传递参数。。能成功才怪!

直接说正确方法吧:就是传什么参数就用什么参数呗。。反正没有默认参数

定义的时候,显式地接受参数

function class.test(tt)

  print(tt.a,tt.b) 

end

class.test(class)

关于lua中的冒号(":")(".")的区别 一、定义方法的区别 1、冒号定义方法,默认会接受self参数;而定义的时候,默认不会接受self参数 例: (1)冒号定义 function class:test()   --这里会接受self参数,比如   print(self.a,self.b)   在这里self就是class对象本身,因此不会出错 end (2)定义 function class.test() ... 阅读详情

相关推荐

Lua 函数前的冒号,你知道他们的区别吗?

(.)冒号(:)的区别主要在于是否自动处理self参数。 没有使用冒号的函数调用或定义,意味着它是一个独立的、不自动关联任何表的普通函数,这种函数的调用参数传递完全取决于你在调用时所提供的参数。

Coder567 1725

Lua中使用冒号区别

Lua中使用(.)与冒号(:)的区别在于: 在函数定义的时候使用:会默认接收self参数; 在函数调用的时候使用:会默认传递调用者自己为参数; 在函数定义调用的时候使用.则需要显式接收或者传递self参数。 local test = {} function test:funcA() print("I`m funcA") end function test.funcB(self) print("I`m funcB") end test:funcA() test.funcA

weixin_43284350的博客 976

Lua冒号区别

事先声明,本文主要用于个人笔记,不保证原创性。

kxxxxc的博客 1375

Lua——函数冒号区别

Lua——函数冒号区别 函数前使用冒号表示该函数默认传递一个self参数,并且该参数指向调用者;使用则不会传递一个self参数,例如: local person = {} function person:talk(mes) print("talk",self,mes) end function person:sleep(time) print("sleep",self,time) end person:talk("aaa") person.sleep(5) 输出结果如下:

Fujige 854

关于lua中的冒号区别与使用

关于lua中的冒号区别 // 冒号的用法 clazz={} function clazz:new() return self end function clazz:init(arg, num) self.arg = arg self.num = num print(self.arg) end function clazz.util(arg, num) clazz.arg = arg clazz.num = num prin

lv_hha的博客 608

Lua使用冒号区别

记录Lua知识

weixin_50702814的博客 661

lua冒号操作符的区别

看下面示例代码: local str = "abcde" print("case 1:", str:sub(1, 2)) print("case 2:", str.sub(str, 1, 2)) 执行结果: case 1: ab case 2: ab 冒号操作会带入一个 self 参数,用来代表 自己。而操作,只是 内容 的展开。 在函数定义时,使用冒号将默认接收一个 self 参数,而使用则需要显式传入 self 参数。 示例代码: obj = { x = 20 } function obj

jinhezx的博客 264

Lua中调用函数使用冒号区别

Lua中调用函数使用冒号区别 作者:笨木头 字体:[增加 减小] 类型:转载 时间:2014-09-15 我要评论 这篇文章主要介绍了Lua中调用函数使用冒号区别,本文涉及了Lua中面向对象的一些的知识,并给出了一个简单的类代码实例,需要的朋友可以参考下 本文是面向对象预热篇,讲解函数两种调用方式的区别,初学者比较容易被坑。

boshuzhang的专栏 560

lua "."冒号":"、"seif"使用及区别

网上帖子太多了,看了好多,真是剪不断,理还乱。。。。 先说明一下self是在使用冒号":"是才有的关键字,就是说"."不起作用。 先上代码: tab={ value="第一个值" } --现在我们想通过方法打印tab的valua值 function tab.pr(t)     --在tab中定义的方法pr() print(t.value); end --然后我们调用

fengya1的专栏 1197

Lua(英文句)与冒号区别

Lua(英文句)与冒号区别用于定义调用函数的时候,不会传递self参数,不能够在函数内部使用self,否则报告错误。使用冒号定义调用函数的时候,会自动将调用者实例自身作为self参数进行传递,此时函数能够使用self参数。例function Foo.foo(arg) self.data = 10 -- 发生错误,self未定义 end调用:ins.foo(arg)

performance 1003

lua冒号(:)与(.)的区别

lua开发中我们经常会混淆这两者之间的区别,下面通过一个示例来解释: Class = {} Class.__index = Class function Class.new(x,y) local cls = {} setmetatable(cls, Class) cls.x = x cls.y = y return c...

ahyz9638的博客 211

Lua冒号区别

定义的时候冒号默认接收self参数 调用的时候冒号默认传递调用者自己为参数 而句要显示传递或接收self参数 -- 例如:句定义,需要显示传递或接收 [plain] view plaincopy a = { x = 1 }   function a.fun(self)    print(self.x)   end      a.f

stormbjm的专栏 3万+
上一篇: C++的构造函数、初始化方式
下一篇: python 中 with 的用法和原理
爱拍凯特
博客等级 码龄14年 12粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值