Lua 点号与冒号

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
Lua 点号与冒号
      lua本身没有类功能,它的类功能是通过元表来实现的。类的函数调用通过obj:function方式。但类的成员赋值又是通过obj.var方式来实现的。翻阅lua 5.1手册,发现对于冒号只有这么一段解释。(lua 5.1手册

冒号语法可以用来定义方法, 就是说,函数可以有一个隐式的形参 self。 因此,如下写法:
    function t.a.b.c:f (params) body end
是这样一种写法的语法糖:
    t.a.b.c.f = function (self, params) body end

然后我做了如下测试,来弄清楚冒号的用法
function test()
	t.f()
	t:g()
	t:h()
	t.i()
    t:h()
    t.j(t)
    t:h()
end

t = {}

function t.f()    
    print("tf");
end

function t:g()
    self.x = 10
end

function t:h()
    print(self.x)
end

function t.i()    
    t.x = 20
end

function t.j(k)    
    k.x = 30
end

输出:
[LUA-print] tf
[LUA-print] 10
[LUA-print] 20
[LUA-print] 30

发现冒号会提供一个内置table供function之间通信。

Lua冒号的区别 事先声明,本文主要用于个人笔记,不保证原创性。 阅读详情

相关推荐

Lua语言中的冒号:和.

lua编程中,经常遇到函数的定义和调用,有时候用调用,有时候用冒号调用。 girl = {money = 200} function girl.goToMarket(girl ,someMoney) girl.money = girl.money - someMoney end girl.goToMarket(girl ,100) print(girl.money)...

return9的博客 2734

lua 中的":"(冒号)语法

定义一个模块 local M = {} function M.MyFunc(self, a) --方法体 end return M 调用模块中的方法, 下面两种调用方式作用是一样的 local M = require('M') M.MyFunc(M,a) local M = require('M') M:MyFunc(a) 使用冒号调用模块里的方法时会将冒号前的自身作为参...

oncruise的博客 7246

关于lua中的冒号(":")和(".")的区别

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

weixin_34414650的博客 873

Lua 语言中的冒号self

操作符) 用于访问表中的字段或调用表中的函数。冒号操作符) 用于调用表中的方法,并且会自动将调用该方法的对象作为第一个参数传递给该方法。self通常用于引用当前对象,允许你访问对象的属性和其他方法。希望这些解释对你有所帮助!如果有任何疑问或者需要进一步的信息,请随时提问。

qq_33240556的博客 1291

lua冒号的区别

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

爱拍凯特的专栏 3303

Lua中使用冒号的区别

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

fightsyj的博客 3518

Lua中的self、冒号

介绍 在lua中,表拥有一个标识:self。self类似于this指针,大多数面向对象的语言(比如C++、C#)都隐藏了这个机制,在编码时不需要显式地声明这个参数,就可以在方法内使用this。在lua中,提供了冒号操作符来隐藏self参数,比如: local t = {a = 1, b = 2} function t:Add() return (self.a + self.b) end print(t.Add()) 冒号实现同样的功能 冒号有两个作用:1.对于方法定义来说,提供了一个额外的隐藏形参

Katarina_777的博客 1751

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

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

Coder567 1724

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 --- 冒号

冒号的作用:1、定义函数时,给函数添加隐藏的第一个参数 self2、调用函数时,默认把当前调用者作为第一个参数传递进去 如a:b(c) 可以理解为 a.b(a, c) 以下是用的定义和调用函数的方式: 1 Song = 2 { 3 name = "", 4 timeLength = 0, 5 } 6 7 function Song.SetNa...

weixin_30815469的博客 304

Lua使用冒号的区别

记录Lua知识

weixin_50702814的博客 661

lua冒号

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

L的博客 1013

关于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开发中我们经常会混淆这两者之间的区别,下面通过一个示例来解释: 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 "."和冒号":"、"seif"使用及区别

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

fengya1的专栏 1197

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

冒号操作会带入一个 self 参数作为第一个参数,用来代表调用的table本身。 在函数定义时,使用冒号将默认接收一个 self参数,而使用则需要显式传入 self 参数。 TSprite = { x = 0, y = 0, } function TSprite.setPosition(x, y) TSprite.x = x; TSprite.y = y; en...

钟离默的个人博客 411

Lua-冒号

简介 关于冒号(:)(.) 冒号自带隐藏self,不带self,方法用冒号 示例 class={x=1} --冒号+方法 function class:print() print(self.x); end --+self function class.print(self) print(self.x); end --冒号调用 class:print(); --...

jason_hw5d的博客 263
上一篇: python 调用 c 函数
下一篇: Lua 面向对象的原理
缥缈的云
博客等级 码龄15年 94粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值