Lua表达式和控制结构学习笔记

  算术操作符

  Lua 的算术操作符有:

  "+"(加法):

  

复制代码 代码如下:

  print(1 + 2)

  "-"(减法):

  

复制代码 代码如下:

  print(2 - 1)

  "*"(乘法):

  

复制代码 代码如下:

  print(1 * 2)

  "/"(除法):

  

复制代码 代码如下:

  print(1 / 2)

  "^"(指数):

  

复制代码 代码如下:

  print(27^(-1/3))

  "%"(取模):

  

复制代码 代码如下:

  print(5 % 3)

  关系操作符

  Lua 提供以下关系操作符:

  

复制代码 代码如下:

  < > <= >= == ~=

  以上操作符返回的运算结果都是 true 或 false。字符串跟数字不可以进行比较

  逻辑操作符

  逻辑操作符有 and、or、not

  

复制代码 代码如下:

  print(1 and 2)

  print(nil and 1)

  print(false and 2)

  print(1 or 2)

  print(false or 5)

  逻辑操作符将 false 和 nil 视为假,其它的为真。

  局部变量与作用域

  Lua 通过 local 语句来创建局部变量,局部变量的作用域仅限于声明它们的那个块。

  

复制代码 代码如下:

  local a, b = 1, 10

  if a < b then

  print(a)

  local a

  print(a)

  end

  print(a, b)

  用局部变量 local 保存全局变量,可以加速在当前作用域中对全局变量的访问。对于加速的效果,对比下面计算 斐波那契数列(Fibonacci)的执行时间便知:

  

复制代码 代码如下:

  function fibonacci(n)

  if n < 2 then

  return n

  end

  return fibonacci(n - 2) + fibonacci(n - 1)

  end

  io.write(fibonacci(50), "\n")

  使用局部变量 local

  

复制代码 代码如下:

  local function fibonacci(n)

  if n < 2 then

  return n

  end

  return fibonacci(n - 2) + fibonacci(n - 1)

  end

  io.write(fibonacci(50), "\n")

  控制结构

  if then elseif else end

  

复制代码 代码如下:

  if num == 1 then

  print(1)

  elseif num == 2 then

  print(2)

  else

  print("other")

  end

  Lua 不支持 switch 语句

  while

  先判断 while 条件,如果条件为真,继执行循环体,否则结束

  

复制代码 代码如下:

  local i = 1

  while a[i] do

  print(a[i])

  i = i + 1

  end

  repeat-until

  

  先执行一次循环体,再判断条件,如果条件为真则退出循环体,否则继续执行循环体。类似其它语言的 do-while 语句,循环体至少会执行一次

  

复制代码 代码如下:

  local a = 1

  repeat

  a = a + 1

  b = a

  print(b)

  until b < 10

  for 循环

  for 循环语句有两种形式:数字型for(numeric for)、泛型for(generic for)

  数字型 for 语法:

  

复制代码 代码如下:

  for start, end, step do

  doing something

  end

  start 是开始值,end 是结束值,step是步长(可选,默认为1)

  

复制代码 代码如下:

  for a = 10, 0, -2 do

  print(a)

  end

  泛型 for 循环通过一个迭代器(iterator)函数来遍历所有值:

  

复制代码 代码如下:

  tab = { key1 = "val1", key2 = "val2", "val3" }

  for k, v in pairs(tab) do

  if k == "key2" then

  break

  end

  print(k .. " - " .. v)

  end

  break 和 return 语句用于跳出当前执行的块。