使用Lua碰到的问题、踩坑记录

news2024/9/20 6:27:00

文章目录

  • 1. 获得整除结果
  • 2. 在数组末尾添加元素的两种写法
  • 3. 接收可变参数 '...'
  • 4. 复杂表结构的定义
  • 5. 一行代码, 同时定义多个变量
  • 6. 数组与集合的遍历方式
  • 7. 函数声明和调用的位置关系

1. 获得整除结果

用 “/” 来做除法, 得到的结果中总会带有小数. 可以使用 math.modf()math.floor() 来获得结果中的整数部分:

print(10/3)
print(math.modf(10/3))
print(math.floor(10/3))

--------输出结果--------                                                                                                                                                                                      
3.3333333333333
3       0.33333333333333
3

此外, 如果被除数是整数的话,我们也可以使用 ‘//’ 来进行取商

print(7//2)
print(7.0//2) --PS: 当被除数或除数为浮点数时, 结果也是浮点数

--------输出结果--------       
3
3.0

2. 在数组末尾添加元素的两种写法

local tb = {}
                                                                                                                                                                                          
tb[#tb + 1] = {name='zhangsan'}
for _, data in pairs(tb) do
    print(data.name)
end

table.insert(tb, {name='lisi'})
for _, data in pairs(tb) do
    print(data.name)
end

--------输出结果--------  
zhangsan
zhangsan
lisi

3. 接收可变参数 ‘…’

使用 table.pack() 接收可变参数, 返回用所有参数以键 1,2, 等填充的新表, 并将 “n” 这个域设为参数的总数:

function Test(...)
    local arg = table.pack(...)
    for k, v in pairs(arg) do
        print('(key, value) -> ' .. k .. ', ' .. v)
    end 
    print('length: ' .. arg.n)
end

Test('你好', nil, nil, '世界')

--------输出结果--------  
(key, value) -> 1, 你好
(key, value) -> 4, 世界
(key, value) -> n, 4
length: 4

4. 复杂表结构的定义

在定义一个表时, 可以顺便在表中完成表成员的定义:

local actived = {skill={}, fetter = {}, n = 0}
print(type(actived.skill))
print(type(actived.fetter))
print(type(actived.n))
print(actived.n)

--------输出结果--------  
table
table
number
0

5. 一行代码, 同时定义多个变量

local t1, t2, a = {}, {}, 10
print(type(t1))
print(type(t2))
print(type(a))

--------输出结果--------  
table
table
number

6. 数组与集合的遍历方式

遍历数组使用 ipairs, 遍历时 key 按照 [1, 2, 3, 4…] 的顺序递增, 直到 value = nil 时结束遍历

-- 例子1
table = { [3] = "val3", [4] = "val4" , [8] = "val8", [9] = "val9"  }
print("-----------ipairs_test1----------------")
for k,v in ipairs(table) do
    print(k,v)
end

-- 例子2
table = { [1] = "val1", [2] = "val2" , [8] = "val8", [9] = "val9"  }
print("-----------ipairs_test2----------------")
for k,v in ipairs(table) do
    print(k,v)                                                                                                                                                                            
end

编译运行:
在这里插入图片描述

遍历集合的话使用 pairs, 他会无序地遍历表中所有的 key 值,当 value 为 nil 时不输出,但不会停止遍历:

-- 例子1
table = { [3] = "val3", [4] = "val4" , [8] = "val8", [9] = "val9"  }
print("-----------ipairs_test1----------------")
for k,v in pairs(table) do
    print(k,v)
end
-- 例子2
table = { [1] = "val1", [2] = "val2" , [8] = "val8", [9] = "val9"  }
print("-----------ipairs_test2----------------")
for k,v in pairs(table) do                                                                                                                                                                
    print(k,v)
end

在这里插入图片描述

7. 函数声明和调用的位置关系

  • 使用function声明的函数(全局函数)时,调用时不会因为声明的顺序找不到
  • 使用local function声明的函数(局部函数)时,调用必须在函数声明之后
function test()
    test1()
    test2()
end
 
function test1()
    print("test1")
end
 
local function test2()
    print("test2")
end
 
test()

编译之后报错
lua5.3: prog.lua:5: attempt to call a nil value (global ‘test2’)

解决

  • 将 local function test2 的声明放到 function test 前面
  • 将 local function test2 修改为function test2

原理

  • 全局函数的定义存储在 _G 中, 调用时会直接到 _G 中查找全局函数的定义
  • 局部函数调用时, 会往上查找局部函数的定义

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

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

相关文章

windows下使用 vscode 远程X11服务GUI显示的三种方法

总结三种方法: 前言 ssh连接要使用-XY。 -X 表示ForwardX11,-Y 是ForwardX11Trusted,就是允许了X11转发,可以实现图形显示,虽然很多工具会默认使用这些参数,但是一般手动加也不会报错,所以就…

命令行中的引号

程序,或者说如果main函数中的参数带引号,那么带引号的部分会被当作一个单独的参数,并传递给main函数。并且解析后,引号会被去掉,并分别传递给argv中的各个参数。 如图所示,第3个参数中的引号被丢弃。

引领智能家居新风尚,WTN6040F门铃解决方案——让家的呼唤更动听

在追求高效与便捷的智能家居时代,每一个细节都承载着我们对美好生活的向往。WTN6040F,作为一款专为现代家庭设计的低成本、高性能门铃解决方案,正以其独特的魅力,悄然改变着我们的居家生活体验。 芯片功能特点: 1.2.4…

ubuntu使用wireshark抓取数据

工具 aircrack-ng工具;wireshark工具 sudo apt-get install aircrack-ng2 sudo add-apt-repository ppa:wireshark-dev/stable sudo apt update sudo apt install -y wireshark使用 airmon-ng 执行ifconfig查看网卡 设置网卡为监听模式:sudo airmo…

UNION嵌套STRUCT的两种类型

1. STRUCT里面的总长度大于UNION中的最大长度 在UNION类型中,嵌套如STRUCT类型,其中STRUCT的类型还比UNION类型中最大的类型的长度还长的时候,会如何处理呢,看下面示例 程序源码 #include "stdafx.h"typedef unsigned…

研究生考试报名上传手持身份证照片,如何拍清晰并且过审

研究生考试是中国高等教育中的一项重要考试,在每年9月下旬开始。在报名过程中,上传手持身份证照片是一个关键步骤,它直接关系到报名是否能够顺利通过审核。本文将为你提供4个实用的技巧,帮助你拍摄出既清晰又符合要求的手持身份证…

【三刷C语言】各种注意事项

这里是阿川的博客,祝您变得更强 ✨ 个人主页:在线OJ的阿川 💖文章专栏:C语言入门到进阶 🌏代码仓库: 写在开头 现在您看到的是我的结论或想法,但在这背后凝结了大量的思考、经验和讨论 目录 1.…

Linux中yum命令

1.Linux常见软件安装方式 a.yum/apt b.rpm安装包安装 c.源码安装 2.yum常用指令 在root权限下可以安装、卸载程序 安装 yum install [package] 卸载 yum remove [package] 还可以使用yum list列出yum源中所有可安装程序 yum list

【Flink Flick CDC】学习笔记

文章目录 FlinkFlink CDC关于转换算子的解释(Transformation)Flink CDC 与 Debezium 有何关系Savepoint 和 CheckpointingSavepoint 和 Checkpointing 的区别 ![请添加图片描述](https://i-blog.csdnimg.cn/direct/8834c721df794978bde12e4e764ed946.png) Flink Flink是一个无…

windows服务管理插件 nssm

NSSM是一个windows下服务管理插件,可以填加、删除、启动、停止服务 1.下载 官网:http://nssm.cc 下载页面:http://nssm.cc/download 直接下载:http://nssm.cc/release/nssm-2.24.zip 2.食用 以填加php8.2为例 2.1.将nssm.ex…

HarmonyOS开发实战( Beta5.0)自定义装饰器实践规范

介绍 本示例介绍通过自定义装饰器在自定义组件中自动添加inspector (布局回调)方法并进行调用。 效果图预览 不涉及 使用说明 在自定义组件上添加自定义装饰器CallbackObserver,并根据参数设置对应的方法名和需要绑定的组件的ID。编译工程,可以根据…

[240912] X-CMD 发布 v0.4.10:新增 spf 模块 | 新增 gh model 功能 | advise、brew 等模块修复

目录 X-CMD 发布 v0.4.10📃Changelog✨ gh✨ spf - 终端文件管理器💡 advise📦 brew - MacOs 系统的包管理工具📂 df 💿📝 TLDR✅ 升级指南 X-CMD 发布 v0.4.10 📃Changelog ✨ gh 新增了 gh …

软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)

软考 – 软件设计师 – 二轮复习(3) – 数据结构(持续更新) 文章目录 软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)前言一、时间、空间复杂度二、递归式时间复杂度三、线性表四、栈五、栈和队列六、串七、朴素模式匹配八、KMP模式匹配九、数组十、矩阵十一、树、二…

思路好!硕士生一作发TOP期刊!!!

2024年8月26日,福建理工大学建筑与城乡规划学院2023级城乡规划学硕士研究生岳谞攀以第一作者在国际知名期刊《Sustainable Cities and Society》在线发表题为“Constructing an urban heat network to mitigate the urban heat island effect from a connectivity p…

[网络]TCP/IP协议 之 TCP协议的核心机制(2)

文章目录 TCP核心机制1. 确认应答2. 超时重传3. 连接管理三次握手四次挥手 4. 滑动窗口5. 流量控制6. 拥塞控制7. 延时应答8. 捎带应答9. 粘包问题10. 异常情况 TCP核心机制 1. 确认应答 (上篇) 2. 超时重传 (上篇) 3. 连接管理 建立连接的流程: 三次握手 断开连接的流程…

大模型书籍丨国内顶尖院校出品,非常火爆的LLM大模型入门中文书来了

最近有一本人工智能入门的书比较火,这本书集合了最新的产品、技术,并通过顶尖院校的教授书写而成。我今天阅读了第一章,感觉浅显易懂,顺便把笔记也做出来了,供大家参考。 大语言模型入门 第一部分 背景与基础知识 第…

【小沐学OpenGL】Ubuntu环境下glad的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glad简介 2、安装glad2.1 手动安装glad2.2 git安装glad2.3 源码编译成glad单独库 3、测试glad3.1 例子13.2 例子2 结语 1、简介 1.1 OpenGL简介 OpenGL作为图形界的工业标准,其仅仅定义了一组2D和3D图形接口API,而对…

【最新】全球各国新冠疫情数据集(2020.1-2024.8)

新冠疫情,即新型冠状病毒引发的肺炎疫情,自2019年底首次爆发以来,对全球公共卫生、经济和社会生活产生了深远影响。本次分享的是全球新冠疫情数据,世界各国的新冠疫情数据呈现出复杂多变的态势,不同国家和地区的疫情严…

【软件设计师真题】下午题第四大题---算法设计

系列文章目录 1.【软考之软件设计师】PPT课件 2.【软考之软件设计师】学习笔记 3.【软件设计师真题】下午题第一大题—数据流图设计 4.【软件设计师真题】下午题第二大题—数据库设计 5.【软件设计师真题】下午题第三大题—UML 分析与设计 6.【软件设计师真题】下午题第四…

UEFI学习笔记(八):Memory Services

UEFI学习笔记(八):Memory Services 一、内存服务概况1、PEI阶段2、DXE阶段(系统内存)3、SMM阶段 二、HOB概述1、为什么在PEI阶段要引入HOB?2、HOB的类型 三、MEMORY类型四、内存分布1、PEI内存分布2、DXE内…