--[[ 4 语句 lua 支持的常规语句基本上与C或者Pascal 语言中所支持的那些语句差不多。这些语句包括赋值、控制结构和过程调用。另外Lua来支持一些不 太常见的语句,例如 多重赋值和局部变量声明。 ]]-- --[[ 4.1多重赋值 很少会在一行中为几个没有关联的变量使用多重赋值。多重赋值并不会比相等价的多条单一赋值语句更快。但有时的确会需要多重赋值,例如之前所说的 交换两个变量。还有一种比较常见的应用是用于收集函数的多个返回值。 4.2 局部变量和块(block) i = 10 --全局变量 local j = 1 --局部变量 与全局变量不同的是,局部变量的作用域仅限于声明它们的那个块。一个块(block)是一个控制结构的执行体,或者是一个函数的执行体再或者是一 个程序块(chunk) ]]-- --[[ 4.3 控制结构 Lua提供了一组传统的,小巧的控制结构,包括用于条件执行的if,用于迭代的while,repeat和for。所有的控制结构都有一个显示的终止符:if, for和while以end作为结尾,repeat以until作为结尾。 控制结构中的条件表达式可以是任何值,Lua将所有不是false和nil的值视为“真”,0 和空字符串也是 真 。 4.3.1 if then else if 语句先测试其条件,然后根据测试结果执行then部分或else部分。else 部分是可选的 。 if a < 0 then a = 0 end if ... then ... elseif ... then ... elseif ... then ... else ... end Lua不支持switch语句,所以这种一连串的if-else if 代码是很常见的。 4.3.2 while while ... do ... end 4.3.4 repeat repeat ... until ... 4.3.4 数字型for(numeric for) for语句有两种形式:数字型for和泛型for 数字型for的语法如下: for var=exp1,exp2,exp3 do ... end for i=10,1,-1 do print(i) end 为了更好地使用for循环,还需要了解一些小细节。首先,for的3个表达式是在循环开始前一次性求值的。例如:上例中的f(x) 只会执行一次。其 次,控制变量会被自动地声明为for语句的局部变量,并且仅在循环体内可见。因此,控制变量在循环结束后就不存在了: for i = 1,10 do print(i) end max = i --可能是错误的!这里访问的是一个全局的i。 如果需要在循环结束后访问控制变量的值(通常是在break循环时), 必须将该值保存到另一个变量中: local found = nil for i=1,10 do if i>8 then found = i --包含i的值 break end end print(found) ]]-- -- for i=10,1,-1 do print(i) end --[[ local found = nil for i=1,10 do if i>8 then found = i --包含i的值 break end end print(found) ]]-- --[[ 4.3.5 泛型for 泛型for循环通过一个迭代器(interator)函数来遍历所有值: 打印数组a的所有值 for i,v in ipairs(a) do print(v) end 打印table t中所有的key for k in pairs(t) do print(k) end 从外观上看泛型for比较简单,但其实它是非常强大的。通过不同的迭代器,几乎可以遍历所有的东西,而且写出的代码极具可读性。标准库提供了几 种迭代器,包括用于迭代文件中每行的io.lines()、迭代table元素的pairs,迭代数组元素的ipairs、迭代字符串中单词的string.gmatch 等。 当然,也可以编写自己的迭代器。对于泛型for和数字for循环有两个相同点:1.循环变量是循环体的局部变量;2.绝不应该对循环变量作任何赋值。 Days={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"} resDays={} for k,v pairs(Days) do resDays[v] = k end ]]-- --[[ 4.4 break 和return break和return 用于跳出当前的块。 return 之后的语句不会被执行。 ]]--
Lua笔记4-语句,控制表达式
最新推荐文章于 2023-01-09 10:38:01 发布