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

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

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

相关文章

.gitignore文件使用

.gitignore简介 .gitignore文件是Git 版本控制系统中的一个重要配置文件&#xff0c;它用于指定哪些文件或目录应该被Git忽略&#xff0c;即不被纳入版本控制中。 .gitignore编写规则 在文件中添加要忽略的文件和目录的模式。每一行表示一个模式。 使用通配符来匹配多个文件或目…

eclipse 老的s2sh(Struts2+Spring+Hibernate) 项目 用import导入直接导致死机(CPU100%)的解决

1、下载Apache Tomcat - Apache Tomcat 8 Software Downloads 图中是8.5.100的版本&#xff0c;下面的设置用的是另一个版本的&#xff0c;其实是一样。 2、先将Server配好&#xff0c;然后再进行导入操作。 2、选择jdk 当然&#xff0c;这里也可以直接“Download and instal…

python调用web_service

安装依赖 pip install suds示例代码 from suds.client import Client from suds.plugin import MessagePlugin import logging# 启用日志记录以便调试 logging.basicConfig(levellogging.INFO) logging.getLogger(suds.transport).setLevel(logging.DEBUG)class LogPlugin(Me…

ARM功耗管理框架之SCP

安全之安全(security)博客目录导读 目录 一、功耗管理框架中的SCP 二、SCP的示例 三、SCP固件 四、SCP启动流程 五、SCP的memory map 六、SCP与AP的通信 思考:功耗管理框架?SCP?PPU?LPI?之间的关系?如何配合? 一、功耗管理框架中的SCP 二、SCP的示例

【Python】中的X[:,0]、X[0,:]、X[:,:,0]、X[:,:,1]、X[:,m:n]、X[:,:,m:n]和X[: : -1]

Python中 x[m,n]是通过numpy库引用数组或矩阵中的某一段数据集的一种写法&#xff0c;m代表第m维&#xff0c;n代表m维中取第几段特征数据。 通常用法&#xff1a; x[:,n]或者x[n,:] X[:,0]表示对一个二维数组&#xff0c;取该二维数组第一维中的所有数据&#xff0c;第二维中…

使用本地数据对transformers模型进行微调训练

模型 transformers模型是使用比较多的模型&#xff0c;奈何各个都是体积大&#xff0c;找了一个使用人多不是很大的模型进行训练。 需要魔法 bert-base-uncased模型仓库地址 huggingface下的所有仓库都是git的&#xff0c;也就意味着你可以使用 git clone 可以下载仓库内所有的…

跟着AI学AI_07张量、数组、矩阵

说明这三个概念不是一个范畴的东西&#xff0c;但是很容易混淆&#xff0c;因此放到一起进行说明。 张量&#xff08;Tensor&#xff09; 张量是一个多维数组的通用概念&#xff0c;用于表示具有任意维度的数值数据。在数学和计算机科学中&#xff0c;张量是广泛用于表示数据的…

震坤行坤合供应链荣获“2024 LOG低碳供应链物流-最具影响力品牌商”

震坤行坤合供应链荣获“2024 LOG低碳供应链物流-最具影响力品牌商” 近日&#xff0c;罗戈网在青岛举办了2024第三届低碳供应链&物流创新发展高峰论坛&#xff0c;此次峰会聚焦“物流碳中和&#xff0c;可持续供应链”这一核心议题&#xff0c;汇聚国内外双碳践行企业、低碳…

【嵌入式系统实践】实验四综合实验部分代码

由于综合实验未给出一个固定的思路或者目标&#xff0c;这里仅写出部分内容&#xff0c;以便于期末复习背诵手写代码用。 自己写的func.h和func.c涵盖了期末所考手写代码部分&#xff0c;背诵过来就挂不了科。 // functions.h #ifndef FUNCTIONS_H #define FUNCTIONS_Hextern …

D 25章 进程的终止

D 25章 进程的终止 440 25.1 进程的终止&#xff1a;_exit()和exit() 440 1. _exit(int status)&#xff0c; status 定义了终止状态&#xff0c;父进程可调用 wait 获取。仅低8位可用&#xff0c; 调用 _exit() 总是成功的。 2.程序一般不会调用 _exit()&#xff0c; 而是…

C++:调整数组顺序使奇数位于偶数前面【面试】

在C&#xff0c;如果要调整数组顺序使所有奇数位于偶数前面&#xff0c;这里提供一种简单且常用的方法&#xff1a;双指针技术。这种方法不需要额外的空间&#xff0c;并且时间复杂度为O(n)。 以下是使用双指针技术实现的示例代码&#xff1a; #include <iostream> #in…

Release和Debug的区别?Release有什么好处?【面试】

Release和Debug的区别&#xff1a; 优化&#xff1a;Debug版本通常不进行优化&#xff0c;以便更容易调试&#xff1b;Release版本则经过高度优化&#xff0c;以提高性能。调试信息&#xff1a;Debug版本包含详尽的调试信息&#xff0c;如符号信息和源代码映射&#xff1b;Rel…

对iOS开发中的链接器ld64和-ld_classic的深入理解

哈喽&#xff0c;大家好&#xff0c;随着iOS应用程序的开发日益增多&#xff0c;开发者们经常会在Xcode中遇到一些特定的编译器和链接器选项。其中&#xff0c;ld64和-ld_classic是两个常见的概念。这一期将深入介绍这两个概念&#xff0c;以帮助iOS开发者更好地理解它们的作用…

什么是全局对象和全局变量

在JavaScript中&#xff0c;全局对象和全局变量是两个重要的概念&#xff0c;它们与代码的执行环境和作用域紧密相关。 全局对象 全局对象&#xff08;Global Object&#xff09;是在代码的任何地方都能访问到的对象。在浏览器环境中&#xff0c;全局对象通常是window对象&am…

公司面试题总结(五)

25.谈一谈箭头函数与普通函数的区别&#xff0c;箭头函数主要解决什么问题&#xff1f; 箭头函数与普通函数的区别&#xff1a; ⚫ 语法简洁性&#xff1a; ◼ 箭头函数使用>符号定义&#xff0c;省略了 function 关键字&#xff0c;使得语法更为紧凑。 ◼ 对于单行函…

【Linux系统编程】进程间通信

进程间通信 1.概念 进程间通信&#xff08;IPC&#xff0c;InterProcess Communication)是指在不同进程之间传播或交换信息。 优点&#xff1a; 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&…

机器学习笔记 - 用于3D数据分类、分割的Point Net简述

一、简述 在本文中,我们将了解Point Net,目前,处理图像数据的方法有很多。从传统的计算机视觉方法到使用卷积神经网络到Transformer方法,几乎任何 2D 图像应用都会有某种现有的方法。然而,当涉及到 3D 数据时,现成的工具和方法并不那么丰富。3D 空间中一个工具就是Point …

《转载》前苏联的三进制计算机Setun

1、苏联的三进制计算机概述 早在 1956 年&#xff0c;就需要创建一种可在大学和实验室中使用的实用数字计算机模型。为此&#xff0c;需要一种易于学习、可靠、廉价但同时高效、专为大规模使用而设计的小型计算机。 对这种机器的要求&#xff1a;运行速度必须等于每秒数百次操作…

ARM_CCI500_execution_tb

目的&#xff1a;工作记录一下对CCI500 local验证case的波形理解&#xff0c;梳理一下ACE接口的逻辑流程。 CCI简单描述功能&#xff1a;基于目录的做缓存一致性功能的模块&#xff0c;支持4个ACE、6个ACE_LITE(ACE和ACE_LITE加起来不超过7个)、4个memory port、2个system por…

力扣hot100: 48. 旋转图像

LeetCode&#xff1a;48. 旋转图像 受到力扣hot100&#xff1a;54. 螺旋矩阵的启发&#xff0c;我们可以对旋转图像按层旋转&#xff0c;我们只需要记录四个顶点&#xff0c;并且本题是一个方阵&#xff0c;四个顶点就能完成图像的旋转操作。 1、逐层旋转 注意到&#xff0…