梧州网站开发,用搬瓦工做储存网站,廊坊网站关键字优化,seo关键词优化软件官网3 初级阶段 —— 控制结构 文章目录 3 初级阶段 —— 控制结构3.1 条件语句#xff1a;if、else、elseif3.2 循环语句#xff1a;for、while、repeat-until3.2.1 输出所有的命令行参数3.2.2 while.lua3.2.3 repeat.lua及其作用域 #x1f525;3.2.4 for.lua (For Statement)… 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)3.2.5 泛型for3.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)
end3.2 循环语句for、while、repeat-until
3.2.1 输出所有的命令行参数
下标从1开始, 但-1, -2也可以, 没有值就是nil 块分界词 do end 语句不用加分号, 也可以加 #arg就是内置的全局变量
for i -2, #arg do print(i, arg[i])
endoutput:
# lua args.lua 2 a
-2 nil
-1 lua
0 args.lua
1 2
2 a3.2.2 while.lua
local cnt 0
local i 1
while i 100 do cnt cnt i i i 1
end
print(cnt) -- 50503.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.41421356237473.2.4 for.lua (For Statement)
for 循环用于迭代数值或集合。
More precisely, a for statement like for v _e1_, _e2_, _e3_ do _block_ endis 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
end3.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))
end3.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%