Lua使用点号和冒号的区别

首先建立一个table,再分别定义两个方法,如下:

Lua 复制代码
local meta = {}

function meta:test1(...)
    print(self)
    print("++++++++++++++++++++")
    for k,v in pairs({...}) do
        print(v)
    end
end

function meta.test2(...)
    print(self)
    print("++++++++++++++++++++")
    for k,v in pairs({...}) do
        print(v)
    end
end


meta:test1(1,2,3,4,5);
print("---------------------")
meta.test1(1,2,3,4,5);
print("---------------------")
meta:test2(1,2,3,4,5);
print("---------------------")
meta.test2(1,2,3,4,5);
print("---------------------")
print(meta);

运行代码结果:

从结果来看,在调用时,使用冒号会将自身table当作参数传入到方法中,使用点号不会传入自身table,用冒号调用用点号定义的方法时,还是会传入自身的table,但是self变量是nil,用点号调用冒号定义的方法时,会将传入的第一个参数默认为传入的是自身table,self变量也会变成第一个参数。

结论:使用冒号的方法,调用时会默认将自身table传入,在方法中会赋值给self,

使用点号的方法,调用时只会将参数传入方法,在方法中没法使用self。

相关推荐
2601_966949655 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨7 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪8 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风8 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
2601_9628857210 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
Wang's Blog10 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
下一站春风里11 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
天外飞雨道沧桑12 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
hhhjhl12 小时前
Yup 跨端三方库仓颉适配全流程
java·开发语言
运维行者_12 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php