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。

相关推荐
峥嵘life2 小时前
Android WiFi 热点 Channel 信道 和 Frequency 频率 转换总结
android·开发语言
wgego3 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
冻柠檬飞冰走茶3 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
智购科技自动售卖机厂家3 小时前
从STM32到RK3588——自动售货机嵌入式主控方案的架构演进~YH
stm32·嵌入式硬件·物联网·架构·lua·零售·symfony
山峰哥4 小时前
数据库工程与SQL调优:从慢查询到秒级响应的实战之路
java·开发语言·数据库·sql·深度优先·启发式算法
wangjialelele4 小时前
Selenium4 + Java Web自动化测试入门指南:从环境搭建到常用操作详解
java·开发语言·前端·测试工具·自动化
Awna4 小时前
Golang 大小写可见性规范
开发语言·后端·golang
AI科技星5 小时前
曲率‑挠率与 $\boldsymbol{\omega/c}$ 的关系、精算验证及其物理意义
c语言·开发语言·线性代数·算法·决策树·机器学习·ai科技星
鹿角片ljp5 小时前
Java框架篇:Spring + SpringMVC + SpringBoot + MyBatis深度复习
java·开发语言
xlxxy_6 小时前
外部系统调用SAP接口遇到的一些报错
开发语言·数据库·sap·abap