当前位置: 首页 > news >正文

【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)

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

[[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

往期回顾

  • 【CS.PL】Lua 编程之道: 简介与环境设置 - 进度8%
  • 【CS.PL】Lua 编程之道: 基础语法和数据类型 - 进度16%

相关文章:

  • 浏览器f12控制台怎么获取vue实例,并且修改data数据
  • C语言学习系列:笔记列表
  • 信号处理中的相位
  • ESP32s3与Lsm6ds3通信---i2c【开源】
  • 单目物体测距
  • Linux 性能优化基础
  • 2024050901-重学 Java 设计模式《实战访问者模式》
  • DB-Engines Ranking 2024年6月数据库排行
  • 大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程
  • 【乐吾乐2D可视化组态编辑器】在线使用,快速入门
  • yolov8摔倒检测(包含数据集+训练好的模型)
  • 实现一个vue js小算法 选择不同的时间段 不交叉
  • 数智化招采平台多层级多租户能力的价值
  • php文件包含
  • three.js 第四节 - 创建顶点(索引的使用)
  • “大数据应用场景”之隔壁老王(连载四)
  • Android交互
  • C++入门教程(10):for 语句
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • docker python 配置
  • Java 内存分配及垃圾回收机制初探
  • js算法-归并排序(merge_sort)
  • miaov-React 最佳入门
  • mockjs让前端开发独立于后端
  • Objective-C 中关联引用的概念
  • Python socket服务器端、客户端传送信息
  • Python爬虫--- 1.3 BS4库的解析器
  • Vim Clutch | 面向脚踏板编程……
  • 如何实现 font-size 的响应式
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 项目实战-Api的解决方案
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (160)时序收敛--->(10)时序收敛十
  • (3)llvm ir转换过程
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (阿里云万网)-域名注册购买实名流程
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (三)mysql_MYSQL(三)
  • (十五)、把自己的镜像推送到 DockerHub
  • (循环依赖问题)学习spring的第九天
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)ORM
  • (转)详解PHP处理密码的几种方式
  • **CI中自动类加载的用法总结
  • .axf 转化 .bin文件 的方法