前言:前面的知识点可以参考 

Lua编程笔录--Lua初识及语法一(注释,变量命名,全局/局部变量,数据类型)


1.Lua循环


    lua语言提供了4中循环方式


循环类型

描述

while 循环

在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。

for 循环

重复执行指定语句,重复次数可在 for 语句中控制。

repeat...until

重复执行循环,直到 指定的条件为真时为止

循环嵌套

可以在循环内嵌套一个或多个循环语句(while、for、do..while)



      whild循环


  

while(条件)
do
   循环体
end

    for循环分为两种,一种是数值循环,一种是泛型循环


for var=exp1,exp2,exp3 do  
    <执行体>  
end


   var从exp1变化到exp2,每次变化以exp3为步长递增var,并且执行一次“执行体”,exp3是可选的,默认为1




     泛型循环类似于C#中的foreach语句,以下两个都可以


   

--打印数组a的所有值  
for i,v in ipairs(a) 
	do print(v) 
end

--打印数组a的所有值  
for i,v in pairs(a) 
	do print(v) 
end

     repeat..until循环(和C#中的Do While类似)


    

repeat
   statements
until( condition )



Lua流程控制

Lua 提供了以下控制结构语句:

语句

描述

if 语句

if 语句 由一个布尔表达式作为条件判断,其后紧跟其他语句组成。

if...else 语句

if 语句 可以与 else 语句搭配使用, 在 if 条件表达式为 false 时执行 else 语句代码。

if 嵌套语句

你可以在if 或 else if中使用一个或多个 if 或 else if 语句 。

   if语句:

if(布尔表达式)
then
   --[ 在布尔表达式为 true 时执行的语句 --]
end


   if...else语句

if(布尔表达式) then --[ 布尔表达式为 true 时执行该语句块 --] else --[ 布尔表达式为 false 时执行该语句块 --] end


   if嵌套


if( 布尔表达式 1)
then
   --[ 布尔表达式 1 为 true 时执行该语句块 --]
   if(布尔表达式 2)
   then
      --[ 布尔表达式 2 为 true 时执行该语句块 --]
   end
end


Lua函数

Lua 编程语言函数定义格式如下:

optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
	function_body
	return result_params_comma_separated
end

解析:

  • optional_function_scope
  • : 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字local。
  • function_name:
  • argument1, argument2, argument3..., argumentn:
  • function_body:
  • result_params_comma_separated:
--[[ 函数返回两个值的最大值 --]]
function max(num1, num2)

   if (num1 > num2) then
      result = num1;
   else
      result = num2;
   end

   return result; 
end
-- 调用函数
print("两值比较最大值为 ",max(10,4))
print("两值比较最大值为 ",max(5,6))

以上代码执行结果为:

两值比较最大值为 	10
两值比较最大值为 	6

Lua 中我们可以将函数作为参数传递给函数,如下实例:

myprint = function(param)
   print("这是打印函数 -   ##",param,"##")
end

function add(num1,num2,functionPrint)
   result = num1 + num2
   -- 调用传递的函数参数
   functionPrint(result)
end
myprint(10)
-- myprint 函数作为参数传递
add(2,5,myprint)

以上代码执行结果为:

这是打印函数 -   ##	10	##
这是打印函数 -   ##	7	##

多返回值

Lua函数可以返回多个结果值,比如string.find,其返回匹配串"开始和结束的下标"(如果不存在匹配串返回nil)。

> s, e = string.find("www.runoob.com", "runoob") 
> print(s, e)
5	10

Lua函数中,在return后列出要返回的值得列表即可返回多值,如:

function maximum (a)
    local mi = 1             -- 最大值索引
    local m = a[mi]          -- 最大值
    for i,val in ipairs(a) do
       if val > m then
           mi = i
           m = val
       end
    end
    return m, mi
end

print(maximum({8,10,23,12,5}))

以上代码执行结果为:

23	3

可变参数

Lua函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...) 表示函数有可变的参数。

#arg

例如,我们计算几个数的平均值:

function average(...)
   result = 0
   local arg={...}
   for i,v in ipairs(arg) do
      result = result + v
   end
   print("总共传入 " .. #arg .. " 个数")
   return result/#arg
end

print("平均值为",average(10,5,3,4,5,6))

以上代码执行结果为:

总共传入 6 个数
平均值为	5.5