Lua语法(三)——元表与元方法

参考链接:
系列链接: Lua语法(一)
系列链接: Lua语法(二)——闭包/日期和时间
系列链接: Lua语法(三)——元表与元方法
系列链接: Lua语法(四)——协程
系列链接: Lua语法(五)——垃圾回收
系列链接: Lua语法(六)——面相对象编程

元表与元方法目录

      • 简介
      • 正文
      • 元表
      • 元方法
        • 表相关常用的元方法
          • __index
          • __newindex
          • __len
          • __call
        • 算术及关系运算 元方法
          • __add
          • __eq
          • __len
          • __unm
          • 综合案例
        • 库定义元方法
          • __tostring
          • __pairs

简介

  在Lua中,元表(metatable)是一种特殊的表,用于控制其他表的行为。每个表可以关联一个元表,通过设置元表和元方法,可以修改表的一些默认行为。
  元方法(metamethod)是一种特殊的函数,用于定义表的一些特殊操作。
  元方法通过在元表中定义特定的字段来实现。例如,当表进行加法操作时,Lua会检查表的元表中是否定义了__add字段。如果定义了__add字段,Lua会调用该字段对应的函数来执行加法操作。

正文

元表

只有字符串才有默认的元表,其他类型需要手动添加

任何表都可以作为其他表的元表

---------1.初体验,设置元表,获取元表
t={}
t1={}		--元表
print(getmetatable(t))
setmetatable(t,t1)		--设置元表
print(getmetatable(t))
print(getmetatable("nihao"))
print(getmetatable("hello"))
print(getmetatable(10))
--输出
nil
table: 00000000006e9df0
table: 00000000006e9ef0
table: 00000000006e9ef0
nil-----2.获取字符串默认的元表以及里面的元方法
tab = getmetatable("hello")
for index, value in pairs(tab) doprint(index,value)	--元表for key, value in pairs(value) doprint(key,value)	--所有元方法end
end
--输出
__index	table: 0000000000ea9f30
rep	function: 000000006849d270
format	function: 000000006849eb30
char	function: 000000006849d730
gsub	function: 000000006849fe90
upper	function: 000000006849d150
match	function: 000000006849fe70
unpack	function: 000000006849ddf0
reverse	function: 000000006849d1e0
lower	function: 000000006849d3d0
byte	function: 000000006849f4a0
dump	function: 000000006849f300
gmatch	function: 000000006849d680
sub	function: 000000006849f3a0
pack	function: 000000006849e150
packsize	function: 000000006849dcb0
find	function: 000000006849fe80
len	function: 000000006849cf10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux安装

1、解压vm ware压缩包 2双击安装 3点击自定义硬件 4双击cd/dvd,给虚拟光驱里放虚拟光盘 5记得启动时链接勾上,勾上起点系统时 虚拟光驱才会一起启动 6点击确认即可! 开机 选择第一个 7进入图形化安装界面 8设置时区 9选择硬盘 10网络配置 开启以太网&am…

C语言进阶课程学习记录-数组指针和指针数组分析

C语言进阶课程学习记录-数组指针和指针数组分析 实验-数组指针的大小实验-指针数组小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 实验-数组指针的大小 #include <stdio.h>typedef int(AINT…

简述Java中synchronized关键字的底层工作原理

在Java中&#xff0c;synchronized 关键字是一个重要的同步机制&#xff0c;用于控制多线程对共享资源的访问&#xff0c;以防止并发问题。了解 synchronized 的底层工作原理&#xff0c;可以帮助我们更好地编写线程安全的代码。synchronized 关键字可以应用于方法或者代码块&a…

【MoS2】应变增强的单层MoS2光电探测器

这篇文章的标题是《Strain-Enhanced Large-Area Monolayer MoS2 Photodetectors》&#xff0c;作者是Borna Radatovic等人&#xff0c;发表在《ACS Applied Materials & Interfaces》期刊的2024年第16卷。文章主要研究了应变增强的大面积单层MoS2光电探测器的性能和应用潜力…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题1

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题1 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书&#xff0c;赛题&#xff0c;解析等资料&#xff0c;知识点培训服务 添加博主wx&#xff1a;liuliu548…

Testng测试框架(3)-数据驱动TestNG@DataProvider

TestNG 是一个强大的 Java 测试框架&#xff0c;它提供了许多高级功能&#xff0c;如参数化测试、依赖注入、分组等。其中&#xff0c;DataProvider 是 TestNG 中一个非常有用的注解&#xff0c;用于为测试方法提供数据。 DataProvider 的作用 使用 DataProvider 注解的方法可…

【算法刷题day24】回溯算法+简单剪枝

77.组合 文档链接&#xff1a;[代码随想录] 题目链接&#xff1a;77.组合 题目&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 class Solution { private:vector<int> path;vector<vector&…

java数据结构与算法刷题-----LeetCode260. 只出现一次的数字 III

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 与运算取末尾1分组 与运算取末尾1分组 解题思路&#xff1a;时间…

文献速递:深度学习肝脏肿瘤诊断---基于多相增强 CT 和临床数据的恶性肝肿瘤鉴别诊断深度学习

Title 题目 Deep learning for diferential diagnosisof malignant hepatic tumors based on multi-phase contrast-enhanced CT and clinical data 基于多相增强 CT 和临床数据的恶性肝肿瘤鉴别诊断深度学习 Abstract 摘要 Liver cancer remains the leading cause of can…

Node.js 开发技巧

轻松创建 HTTP 服务器&#xff1a; 使用 Node.js&#xff0c;你可以轻松创建自己的 HTTP 服务器。只需几行代码&#xff0c;你就可以像一位传统的酒保一样为客户端提供服务。记住&#xff0c;不要忘记问客户端想要些什么&#xff01; const http require(http);const server …

事件冒泡、事件捕获、事件委托

事件冒泡、事件捕获、事件委托 事件冒泡和事件捕获: 解释事件冒泡和事件捕获的概念。 事件冒泡和事件捕获是DOM事件传播的两个阶段。当一个事件发生在DOM中的某个元素上时&#xff0c;它可以在父元素之间传播。事件捕获阶段从根节点开始&#xff0c;逐级向下直到触发事件的元素…

2024年150道高频Java面试题(二十六)

51. 线程和进程的区别&#xff1f; 线程和进程是操作系统中进行任务调度和资源分配的两个基本概念。 进程&#xff1a; 进程是操作系统进行资源分配的基本单位。每个进程都有独立的地址空间&#xff0c;一个进程崩溃后&#xff0c;在保护模式下不会影响到其他进程&#xff0…

计算机网络——TCP和UDP协议

目录 前言 前篇 引言 TCP与UDP之间的区别 TCP 三次握手 为什么要三次握手而不是两次握手&#xff1f; 丢包问题与乱序问题的解决 四次挥手 为什么客户端需要等待超时时间&#xff1f; UDP协议 TCP和UDP的主要区别 前言 本博客是博主用于复习计算机网络的博客&…

软件开发安全备受重视,浙江某运营商引入CWASP认证课程,

​浙江省某大型运营商是一家实力雄厚、服务优质的通信运营商&#xff0c;致力于为全省用户提供优质、高效的通信服务。数字时代&#xff0c;该运营商顺应信息能量融合发展趋势&#xff0c;系统打造以5G、算力网络、能力中台为重点的新型信息基础设施&#xff0c;夯实产业转型升…

Redis入门到通关之五大基本数据类型及其使用场景

文章目录 一 什么是NoSQL&#xff1f;二 Redis是什么&#xff1f;三 Redis五大基本类型1 String&#xff08;字符串&#xff09;应用场景 2 List&#xff08;列表&#xff09;应用场景 3 Set&#xff08;集合&#xff09;4 sorted set&#xff08;有序集合&#xff09;应用场景…

基于Python的邮件分类系统设计与实现

基于python的邮件分类系统设计与实现 Design and Implementation of a Python-based Email Classification System 完整下载链接:基于python的邮件分类系统设计与实现 文章目录 基于python的邮件分类系统设计与实现摘要第一章 引言1.1 研究背景1.2 研究目的1.3 研究内容1.4 创…

历史数据或许并不能反映未来趋势

历史数据可以帮助我们理解和分析过去的趋势和模式&#xff0c;从而推测未来的趋势。然而&#xff0c;历史数据并不能直接反映未来的趋势&#xff0c;因为未来的情况可能会受到许多不可预测的因素和变量的影响。历史数据可以作为参考和依据&#xff0c;但在预测未来趋势时需要综…

java内部类和引用传递的理解

日常中的疑惑&#xff0c;不能让他随意溜走 疑惑1&#xff1a; 看到一些代码常常用静态内部类&#xff0c;以及内部类&#xff0c;为什么我不经常用&#xff0c;偶尔是为了省事 才会用到内部类&#xff0c;难道还有一些其他好处&#xff1f; 内部类可以实现多重继承&#x…

代码随想录阅读笔记-回溯【组合总和II】

题目 给定一个数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明&#xff1a; 所有数字&#xff08;包括目标数&#xff09;都是正整数。解集不能包含重复的组…

VBA中如何对工作表进行排序

代码 在VBA中对工作表进行排序的最简单方法是直接使用Move方法来移动工作表。 Sub SortSheetsByNameDescending()Dim sheetsDim sheet As WorksheetDim i As Integer, j As IntegerDim sortedSheets() As Array 获取当前工作簿中的所有工作表Set sheets ThisWorkbook.Sheets…