Lua语法学习(二)

来源:互联网 发布:dva矩阵吸大 编辑:程序博客网 时间:2024/06/06 00:07
  • Lua流程控制
    通过程序设定一个或多个条件判断来完成流程控制,当条件为true时执行指定代码,当条件为false时执行其他代码
    这里写图片描述
    控制结构中的条件表达式结果可以是任何值,Lua认定false和nil为假,true和非nil为真
    注意的是Lua中的0为true
if(0)then    print("0 为 true")end

输出结果

0 为 true

if
Lua if语句格式

if(boolean)then   --在booleantrue 时执行的语句end

a = 10;if( a < 20 )then   print("a 小于 20" );endprint("a 的值为:", a);

输出结果

a 小于 20
a 的值为: 10

if..else
Lua if..else语句格式

if(boolean)then   --booleantrue 时执行该语句块else   --booleanfalse 时执行该语句块end

a = 100;if( a < 20 )then   print("a 小于 20" )else   print("a 大于 20" )endprint("a 的值为 :", a)

输出结果

a 大于 20
a 的值为 : 100

if嵌套
Lua if嵌套语句格式

if(boolean1)thean    --当boolean1为true时执行语句块    if(boolean2)    then        --当boolean2为true时执行语句块    endend

a = 100;b = 200;if( a == 100 )then   if( b == 200 )   then      print("a 的值为 100 b 的值为 200" );   endendprint("a 的值为 :", a );print("b 的值为 :", b );

输出结果

a 的值为 100 b 的值为 200
a 的值为 : 100
b 的值为 : 200


  • Lua函数
    Lua 函数定义格式
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)    function_body    return result_params_comma_separatedend

其中,optional_function_scope为函数修饰符,未设置则是全局函数,如果需要设置为局部函数则要使用修饰符local
function_name为函数名
argument1, argument2, argument3…, argumentn为参数,也可以不带参数
function_body为函数中需要执行的语句块
return result_params_comma_separated为函数返回值,可返回多个值,每个值用逗号隔开

function max(num1, num2)   if (num1 > num2) then      result = num1;   else      result = num2;   end   return result; endprint("两值比较最大值为 ",max(10,4))print("两值比较最大值为 ",max(5,6))

输出结果

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

同时我们可以将函数作为参数传递给函数,例

myprint = function(param)   print("这是打印函数 -   ##",param,"##")endfunction add(num1,num2,functionPrint)   result = num1 + num2   -- 调用传递的函数参数   functionPrint(result)endmyprint(10)-- myprint 函数作为参数传递add(2,5,myprint)

输出结果

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

多返回值
Lua函数可以返回多个值,例

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, miendprint(maximum({8,10,23,12,5}))

输出结果

23 3

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

function average(...)   result = 0   local arg={...}   for i,v in ipairs(arg) do      result = result + v   end   print("总共传入 " .. #arg .. " 个数")   return result/#argendprint("平均值为",average(10,5,3,4,5,6))

输出结果

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


  • Lua 运算符
    Lua提供以下几种运算符类型
    算术运算符
    关系运算符
    逻辑运算符
    其他运算符

    算术运算符

    这里写图片描述

    关系运算符
    这里写图片描述

    逻辑运算符
    这里写图片描述

    其他运算符
    这里写图片描述

    运算符优先等级

^
not - (unary)
* /
* -
..
< > <= >= ~= ==
and
or

  • Lua字符串
    Lua语言中字符串可以用三种方式来表示
    单引号间的一串字符串
    双引号间的一串字符串
    [{和}]间的一串字符串
string1 = "aaa"print("\"字符串 1 是\"",string1)string2 = 'runoob.com'print("字符串 2 是",string2)string3 = [["abc"]]print("字符串 3 是",string3)

输出结果

“字符串 1 是” aaa
字符串 2 是 runoob.com
字符串 3 是 “abc”

字符串大小写转换

string1 = "Lua";print(string.upper(string1))print(string.lower(string1))

输出结果

LUA
lua

字符串查找与反转

string = "Lua Tutorial"-- 查找字符串print(string.find(string,"Tutorial"))reversedString = string.reverse(string)print("新字符串为",reversedString)

输出结果

5 12
新字符串为 lairotuT auL

其他常用函数
计算字符串长度,字符串连接,字符串复制等

string1 = "www."string2 = "runoob"string3 = ".com"-- 使用 .. 进行字符串连接print("连接字符串",string1..string2..string3)-- 字符串长度print("字符串长度 ",string.len(string2))-- 字符串复制 2 次repeatedString = string.rep(string2,2)print(repeatedString)

输出结果

连接字符串 www.runoob.com
字符串长度 6
runoobrunoob

  • Lua数组
    一维数组
    一位数组是最简单的数组,可以使用for循环出数组中的元素,例
array = {"Lua", "Tutorial"}for i= 0, 2 do   print(array[i])end

输出结果

nil
Lua
Tutorial

在Lua中索引值是从1开始,也可以设定成0开始
此外还可以以负数为数组的索引值

array = {}for i= -2, 2 do   array[i] = i *2endfor i = -2,2 do   print(array[i])end

输出结果

-4
-2
0
2
4

多维数组
数组中包含数组或一维数组的索引值所对应的数组

-- 初始化数组array = {}for i=1,3 do   array[i] = {}      for j=1,3 do         array[i][j] = i*j      endend-- 访问数组for i=1,3 do   for j=1,3 do      print(array[i][j])   endend

输出结果

1
2
3
2
4
6
3
6
9


  • Lua迭代器
    迭代器是一种对象,用于遍历标准模板容器中的部分或全部元素

    泛型for迭代器
    泛型for在自己内部函数保存迭代函数,实际上保存三个值:迭代函数,状态常量,控制变量
    泛型for迭代器中提供了集合的key/value对,语法格式如下:

for k, v in pairs(t) do    print(k, v)end

k,v为变量列表;pairs(t)为表达式列表

array = {"Lua", "Tutorial"}for key,value in ipairs(array) do   print(key, value)end

输出结果

1 Lua
2 Tutorial

无状态迭代器
指不保留任何状态的迭代器

function square(iteratorMaxCount,currentNumber)   if currentNumber<iteratorMaxCount   then      currentNumber = currentNumber+1   return currentNumber, currentNumber*currentNumber   endendfor i,n in square,3,0do   print(i,n)end

输出结果

1 1
2 4
3 9

迭代的状态包括被遍历的表(状态常量)和当前索引下标(控制变量)

function iter (a, i)    i = i + 1    local v = a[i]    if v then       return i, v    endendfunction ipairs (a)    return iter, a, 0end

多状态的迭代器

array = {"Lua", "Tutorial"}function elementIterator (collection)   local index = 0   local count = #collection   -- 闭包函数   return function ()      index = index + 1      if index <= count      then         --  返回迭代器的当前元素         return collection[index]      end   endendfor element in elementIterator(array)do   print(element)end

输出结果

Lua
Tutorial

原创粉丝点击