【CS.PL】Lua 编程之道: 控制结构 - 进度24%
3 初级阶段 —— 控制结构
文章目录
- 3 初级阶段 —— 控制结构
- 3.1 条件语句:if、else、elseif
- 3.2 循环语句:for、while、repeat-until
- 3.2.1 输出所有的命令行参数
- 3.2.2 while.lua
- 3.2.3 repeat.lua及其作用域 🔥
- 3.2.4 for.lua (For Statement)
- 3.2.5 泛型for
- 3.2.6 goto
- 往期回顾
3.1 条件语句:if、else、elseif
-- (1)
if true then print(1) -- 1
end -- (2)
if false then print(1)
else print(0) -- 0
end -- (3)
if false then print(1)
elseif true then print(2) -- 2
else print(0)
end
3.2 循环语句:for、while、repeat-until
3.2.1 输出所有的命令行参数
下标从1开始, 但-1, -2也可以, 没有值就是nil
块分界词 do end
语句不用加分号, 也可以加
#arg就是内置的全局变量
for i = -2, #arg do print(i, arg[i])
end
output:
# lua args.lua 2 a
-2 nil
-1 lua
0 args.lua
1 2
2 a
3.2.2 while.lua
local cnt = 0
local i = 1
while i <= 100 do cnt = cnt + i i = i + 1
end
print(cnt) -- 5050
3.2.3 repeat.lua及其作用域 🔥
local cnt = 0
local i = 1
repeat cnt = cnt + i i = i + 1
until i > 100
print(cnt) -- 5050
以下是一个计算平方根的例子:
local x = 2
local sqrt = x / 2
repeat sqrt = (sqrt + x / sqrt) / 2 local diff = math.abs(sqrt^2 - x)
until diff < 0.000001 -- error的作用域包括until后面的语句
print(sqrt) -- 1.4142135623747
3.2.4 for.lua (For Statement)
for 循环用于迭代数值或集合。
More precisely, a for statement like
for v = _e1_, _e2_, _e3_ do _block_ end
is equivalent to the code 分别为起始, 终止, 步长, e₁, e₂, e₃只执行一次
local cnt = 0
for i = 100, 1, -1 do -- 100开始, 到1, 每次-1 cnt = cnt + i
end
print("cnt=", cnt) -- 5050-- 死循环示例
--[[
local cnt = 0
for i = 1, match.huge do -- 死循环 cnt = cnt + iif cnt > 1000 thenbreakend
end
print("cnt=", cnt) -- 5050
]]
function f(x) return 5*x
end
local num = 1
for i = 1, f(num) do -- 这个值一旦给定, f(num)只会调用执行一次 print("Hello!") -- 打印f(1) = 5次num = 2
end
3.2.5 泛型for
for … in … do 用于迭代器,例如遍历表。
[[1000.03.CS.PL-Lua#4.1.5 表的实现 —— 迭代器]]
for k, v in pairs(_G) do -- 全局变量打印print(k, v)
end
--[[output:
...
]]for k, v in pairs(_G.os) do print(k, v) --
end
--[[output:
exit function: 0x564a436fccd0
setlocale function: 0x564a436fd630
date function: 0x564a436fcbb0
getenv function: 0x564a436fd540
difftime function: 0x564a436fcc10
remove function: 0x564a436fd5a0
time function: 0x564a436fd690
clock function: 0x564a436fcb50
tmpname function: 0x564a436fd6f0
rename function: 0x564a436fd5d0
execute function: 0x564a436fcc70
]]
以下是遍历数组、字典和字符串字符的例子:
-- 遍历数组: ipairs后面是一个序列, 不可以是有空洞的数组
local arr = {10, 20, 30, 40, 50}
for index, value in ipairs(arr) do print("Index:", index, "Value:", value)
end
-- 遍历字典(表)
local dictionary = {name = "Alice", age = 25, city = "Wonderland"}
for key, value in pairs(dictionary) do print("Key:", key, "Value:", value)
end
-- 遍历字符串字符
local str = "Lua Programming"
for index, char in ipairs({str:byte(1, #str)}) do print("Index:", index, "Character:", string.char(char))
end
3.2.6 goto
在 Lua 5.2 及以后的版本中,可以使用 goto 标签来实现在循环中跳过当前迭代并进行下一次迭代,从而达到类似于 continue 的效果。
for i = 1, 10 doif i == 5 thengoto continueendprint("Iteration:", i)::continue::
end
这些控制结构为 Lua 提供了强大的流程控制能力,使其能够处理各种复杂的编程任务。
往期回顾
- 【CS.PL】Lua 编程之道: 简介与环境设置 - 进度8%
- 【CS.PL】Lua 编程之道: 基础语法和数据类型 - 进度16%
相关文章:
【CS.PL】Lua 编程之道: 控制结构 - 进度24%
3 初级阶段 —— 控制结构 文章目录 3 初级阶段 —— 控制结构3.1 条件语句:if、else、elseif3.2 循环语句:for、while、repeat-until3.2.1 输出所有的命令行参数3.2.2 while.lua3.2.3 repeat.lua及其作用域 🔥3.2.4 for.lua (For Statement)…...
从“数据孤岛”、Data Fabric(数据编织)谈逻辑数据平台
提到逻辑数据平台,其核心在于“逻辑”,与之相对的便是“物理”。在过去,为了更好地利用和管理数据,我们通常会选择搭建数据仓库和数据湖,将所有数据物理集中起来。但随着数据量、用数需求和用数人员的持续激增…...
vuex4.x 升级pinia,router 中使用同步组件导致项目启动失败
背景描述 升级的项目本来是vue2的项目,先升级成vue3,这个过程相关的问题都被决绝,当时状态管理使用的还是vuex4.x版本。 后面发现变成复杂模块时,后续再对复杂模块的功能进行迭代时,由于js的弱类型,改动时…...
0. 云原生之基于乌班图远程开发
云原生专栏大纲 文章目录 安装乌班图配置静态IP重置root密码开启root远程登录开启远程SSH访问安装docker安装docker-compose安装Edge浏览器安装搜狗输入法安装TeamViewer安装虚拟显示器安装JDK安装maven安装vscodevscode插件安装VSCode配置maven、git、jdk、自动报错vscode快捷…...
C++ 字符串处理5-手机号邮箱如何脱敏处理
1. 关键词2. strutil.h3. strutil.cpp4. 测试代码5. 运行结果6. 源码地址 1. 关键词 关键词: C 字符串处理 分割字符串 连接字符串 跨平台 应用场景: 有些重要信息需要保密,比如手机号、邮箱等,如何在不影响用户阅读的情况下…...
【lesson8】云备份服务端完整版代码
文章目录 util.hppconfig.hpphot.hppdata.hppserver.hppserver.ccMakefilecloud.conf util.hpp #pragma once #include <iostream> #include <fstream> #include <string> #include <vector> #include <sys/stat.h> #include <unistd.h> …...
AI办公自动化:kimi批量搜索提取PDF文档中特定文本内容
工作任务:PDF文档中有资料来源这一行,比如: 资料来源:moomoo tech、The Information、Bloomberg、Reuters,浙商证券研究所 数据来源:CSDN、浙商证券研究所 数据来源:CSDN、arXiv、浙商证券研…...
基于C#开发web网页管理系统模板流程-总集篇
第一篇 基于C#开发web网页管理系统模板流程-登录界面和主界面_c#的网页编程-CSDN博客 第二篇 基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善_c#网页设计-CSDN博客 第三篇 基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善_c#web程序设计…...
什么是DMZ?路由器上如何使用DMZ?
文章目录 📖 介绍 📖🏡 演示环境 🏡📒 DMZ 📒🚀 DMZ的应用场景💡 路由器设置DMZ🎈 注意事项 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在网络管理中,DMZ(Demilitarized Zone,隔离区)是一个特殊的网络区域,常用于将公共访问和内部网络隔离开来。DMZ功能允许…...
【bugfix】解决Redis缓存键清理问题
前言 在Spring Boot应用中集成Redis作为缓存存储时,合理配置RedisTemplate是确保数据正确存储和检索的关键。本文将通过对比分析一段初始存在问题的Redis配置代码及其修正后的版本,探讨如何正确处理Redis键前缀,以避免清理缓存时遇到的问题。…...
泛微开发修炼之旅--15后端开发连接外部数据源,实现在ecology系统中查询其他异构系统数据库得示例和源码
文章链接:15后端开发连接外部数据源,实现在ecology系统中查询其他异构系统数据库得示例和源码...
弹幕逆向signature、a_bogus
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载&a…...
jEasyUI 使用标记创建树形菜单
jEasyUI 使用标记创建树形菜单 jEasyUI 是一个基于 jQuery 的用户界面插件库,它提供了一系列的组件,用于快速构建网页用户界面。其中,树形菜单(Tree Menu)是 jEasyUI 提供的一个非常实用的组件,它可以帮助…...
IT人的拖延——拖是因为不想离开“舒适区”?
人都是求“稳”的,在一个区域内呆了很久,也很舒适了,如果冒险离开进入未知的区域,万一结果不好怎么办?万一自己不适合怎么办?万一这个区域有着自己难以忍受的东西怎么办?这些对未知区域的恐惧感让我们在面对应该要做的事情时,不自觉地又拖延了起来。比如,我们在面临需…...
JUnit 5学习笔记
JUnit 5 学习笔记 1.JUnit5的改变2.JUnit5常用注解及测试2.1 DisplayName/Disabled/BeforeEach/AfterEach/BeforeAll/AfterAll2.2 Timeout2.3 RepeatedTest 3.断言3.1 简单断言3.2 数组断言3.3 组合断言3.4 异常断言3.5 超时断言3.6 快速失败 4.前置条件5.嵌套测试6.参数化测试…...
西格玛 ------ 第18个希腊字母学习
名词解释 在数学中,我们把∑作为求和符号使用,用小写字母σ,表示标准差。 ∑符号表示求和,读音为sigma,英文意思为Sum,Summation,汉语意思为“和”“总和”。 例1 公式使用说明:…...
【C语言】assert.h——断言
文章目录 主要内容调试和发布模式使用示例用法总结与注意事项 断言是一种用于在程序执行过程中进行调试的工具,能够帮助开发者验证程序的某些假设是否为真。如果断言失败,程序会终止,并输出一个错误消息,通常包含出错的文件名和行…...
HTML静态网页成品作业(HTML+CSS)—— 零食商城网页(1个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…...
虚函数机制-动态绑定的应用
虚函数使得程序在运行的时候根据指针指向对象的类型来确定调用哪个函数。 下图中:都为静态绑定。因为在编译器就确定了可以调用的函数 此时当基类指针指向派生类对象时,因为没有virtual关键字,所以在编译阶段就根据指针类型确定了要指向的函…...
MOS开关电路应用于降低静态功耗
本文主要讲述MOS开关电路的应用,过了好久突然想整理一下,有错误的地方请多多指出,在做电池类产品,需要控制产品的静态功耗,即使让芯片进入休眠状态,依旧功率很大,所以在电路中加一组软开关,防止…...
Windows任务栏透明化技术解析:TranslucentTB架构设计与优化实践
Windows任务栏透明化技术解析:TranslucentTB架构设计与优化实践 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentT…...
Vue中实现动态标签页的切换优化与状态管理
1. 动态标签页的核心需求与实现思路 在后台管理系统这类多页面应用中,动态标签页几乎是标配功能。想象一下你正在使用某电商后台,同时开着商品管理、订单处理和用户分析三个页面,这时候标签页的流畅切换和状态保持就显得尤为重要。 我经历过一…...
STC15W4K32S4寄存器操作避坑指南:为什么你的PWM输出异常?(附完整初始化流程图)
STC15W4K32S4寄存器操作避坑指南:为什么你的PWM输出异常? 最近在调试STC15W4K32S4的PWM功能时,发现不少开发者都会遇到一些共性问题:明明按照手册配置了寄存器,PWM输出就是不稳定或者干脆没有波形。这些问题往往源于几…...
STM32上如何用串口BREAK中断优雅处理DMX与RDM协议(附完整代码)
STM32串口BREAK中断实现DMX/RDM协议双模通信实战指南 舞台灯光控制系统对实时性和可靠性有着近乎苛刻的要求。作为行业标准的DMX512协议及其扩展协议RDM,承载着数以万计舞台灯具的控制指令。传统基于STM32的软件轮询检测方案常面临响应延迟、误触发等问题࿰…...
脑皮层房地产:公司在我的神经突触建数据中心
在数字时代的浪潮中,一个颠覆性的概念正在兴起:企业将数据中心直接构建于人类神经突触之上,仿佛一场“脑皮层房地产”的革命。这并非科幻小说的臆想,而是对现代分布式系统和人工智能架构的深刻隐喻。对于软件测试从业者而言&#…...
Claude Code 速查表
其中的:键盘快捷键常规控制Ctrl C:取消输入 / 生成Ctrl D:退出会话Ctrl L:清屏Ctrl O:切换详细输出Ctrl R:反向搜索历史Ctrl G:在编辑器中打开提示Ctrl B:后台运行任务Ctrl …...
Java 17 新特性实战:现代 Java 开发的优雅实践
Java 17 新特性实战:现代 Java 开发的优雅实践 前言 大家好。最近很多读者朋友询问 Java 17 的新特性以及如何在项目中应用这些特性。作为一个长期使用 Java 的架构师,今天我想分享一下 Java 17 的新特性以及在实际项目中的应用经验。 Java 17 的核心新特…...
华为eNSP实战:三层交换机VLAN间通信配置避坑指南(附CE12800特殊命令)
华为eNSP三层交换机VLAN间通信实战:从基础配置到核心设备差异解析 在华为eNSP模拟器的学习过程中,三层交换机配置是网络工程师必须掌握的硬核技能。不同于传统二层交换,三层交换技术融合了路由与交换的优势,能够高效实现VLAN间通信…...
RDK X5上800万像素摄像头延迟从7秒降到200ms:我的5个月踩坑与优化实录
RDK X5高分辨率摄像头优化实战:从7秒延迟到200ms的性能飞跃 深夜的显示器前,我盯着屏幕上缓慢刷新的图像——32642448分辨率下,每按一次快门要等待7秒才能看到结果。作为一名在嵌入式视觉领域摸爬滚打多年的开发者,这种性能表现简…...
告别CANFD高速丢帧!手把手教你配置STM32 FDCAN的收发器延时补偿(TDC)
攻克CANFD高速通信难题:STM32 FDCAN延时补偿实战指南 当CANFD的波特率飙升至10Mb/s时,许多工程师突然发现原本稳定的通信开始频繁丢帧——这往往不是代码逻辑问题,而是物理层信号延时在作祟。本文将带您深入STM32 FDCAN的Transceiver Delay C…...
