Lua笔记4-语句,控制表达式

--[[  4 语句
     lua 支持的常规语句基本上与C或者Pascal 语言中所支持的那些语句差不多。这些语句包括赋值、控制结构和过程调用。另外Lua来支持一些不
     太常见的语句,例如 多重赋值和局部变量声明。


]]--


--[[
   4.1多重赋值
很少会在一行中为几个没有关联的变量使用多重赋值。多重赋值并不会比相等价的多条单一赋值语句更快。但有时的确会需要多重赋值,例如之前所说的
交换两个变量。还有一种比较常见的应用是用于收集函数的多个返回值。
   4.2 局部变量和块(block
   i = 10  --全局变量
   local j = 1 --局部变量

   与全局变量不同的是,局部变量的作用域仅限于声明它们的那个块。一个块(block)是一个控制结构的执行体,或者是一个函数的执行体再或者是一
   个程序块(chunk)

   ]]--


--[[
   4.3 控制结构
   Lua提供了一组传统的,小巧的控制结构,包括用于条件执行的if,用于迭代的whilerepeatfor。所有的控制结构都有一个显示的终止符:if
   forwhileend作为结尾,repeatuntil作为结尾。

   控制结构中的条件表达式可以是任何值,Lua将所有不是falsenil的值视为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 数字型fornumeric for
   for语句有两种形式:数字型for和泛型for
   数字型for的语法如下:

   for var=exp1exp2exp3 do ... end

   for i=10,1,-1 do print(i) end
   为了更好地使用for循环,还需要了解一些小细节。首先,for3个表达式是在循环开始前一次性求值的。例如:上例中的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 iv 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
   breakreturn 用于跳出当前的块。

   return 之后的语句不会被执行。

]]--


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值