print("-----------") print("table 的创建是通过\"构造表达式\"来完成,最简单构造表达式是{},用来创建一个空表。也可以在表里添加一些数据,直接初始化表") d = {} d["key"] = "value" key = 10 d[key] = 22 d[key] = d[key] + 11 for k, v inpairs(d) do print(k .. " : " .. v) end print("在 Lua 里表的默认初始索引一般以 1 开始") e = {"a","b","c","d"} for key, val inpairs(e) do print("Key", key) end print("table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil")
print("-----------") print("函数可以存在变量里") functioncoolFunc(n) if n == 0then return1 else return n + coolFunc(n - 1) end end print(coolFunc(5)) coolFuncNew = coolFunc print(coolFuncNew(5)) print("function 可以以匿名函数的方式通过参数传递") functiontestFun(tab,fun) for k ,v inpairs(tab) do print(fun(k,v)); end end
tab={key1="val1",key2="val2"} testFun(tab, function(key,val)--匿名函数 return key.."="..val end )
print("-----------") print("while 循环") a=10 while( a < 20 ) do print("a 的值为:", a) a = a+1 end
print("for 循环") print("for的三个表达式在循环开始前一次性求值,以后不再进行求值") for i=10,1,-1do print(i) end print("泛型 for 循环通过一个迭代器函数来遍历所有值") a = {"one", "two", "three"} for i, v inipairs(a) do print(i, v) end print("repeat...until 循环的条件语句在当前循环结束后判断") a = 10 repeat print("a的值为:", a) a = a + 1 until( a > 15 ) print("-----------") print("if 例子") a = 10; if( a < 20 ) then print("a 小于 20" ) end print("a 的值为:", a) print("if elseif else 例子") a = 100 if( a == 10 ) then print("a 的值为 10" ) elseif( a == 20 ) then print("a 的值为 20" ) elseif( a == 30 ) then print("a 的值为 30" ) else print("没有匹配 a 的值" ) end print("a 的真实值为: ", a )
函数与运算符
本节对应代码:03-function-and-operator.lua
和其他语言的函数没有特别大的区别,格式如下:
1 2 3 4
optional_function_scope functionfunction_name( argument1, argument2, argument3..., argumentn) function_body return result_params_comma_separated end
print("可以将函数作为参数传递") myprint = function(param) print("[PRINT] -> ", param) end
functionsumCustom(num1, num2, func) result = num1 + num2 func(result) end sumCustom(2020,20, myprint)
print("函数可以有多个返回值") functionmaximum(a) local mi = 1-- 最大值索引 local m = a[mi] -- 最大值 for i,val inipairs(a) do if val > m then mi = i m = val end end return m, mi end print(maximum({1997,7,1,1949,10,1}))
print("函数可以接受可变数目的参数,用 ... 表示") functionsum(...) local s = 0 for i, v inipairs{...} do--> {...} 表示一个由所有变长参数构成的数组 s = s + v end return s end print(sum(1,2,3,4,5,6,7)) print("可以通过 select(\"#\"...) 来获取参数个数") functionaverage(...) result = 0 localarg={...} for i,v inipairs(arg) do result = result + v end print("总共传入 " .. select("#",...) .. " 个数") return result/select("#",...) end print("平均值为", average(1,3,5,7,9)) print("调用 select 时,必须传入一个固定实参 selector(选择开关) 和一系列变长参数。如果 selector 为数字 n,那么 select 返回参数列表中从索引 n 开始到结束位置的所有参数列表") functionf(...) a = select(3,...) -->从第三个位置开始,变量 a 对应右边变量列表的第一个参数 print (a) print (select(3,...)) -->打印所有列表参数 end f(0,1,2,3,4,5)
print("计算运算符展示") a = 14 b = 5 print("a=",a) print("b=",b) c = a + b print("a + b 的值为 ", c ) c = a - b print("a - b 的值为 ", c ) c = a * b print("a * b 的值为 ", c ) c = a / b print("a / b 的值为 ", c ) c = a % b print("a % b 的值为 ", c ) c = a // b print("a // b 的值为 ", c ) c = a^2 print("a^2 的值为 ", c ) c = -a print("-a 的值为 ", c )
print("关系运算符展示") print("a=",a) print("b=",b) if( a == b ) then print("a 等于 b" ) else print("a 不等于 b" ) end
if( a ~= b ) then print("a 不等于 b" ) else print("a 等于 b" ) end
if ( a < b ) then print("a 小于 b" ) else print("a 大于等于 b" ) end
if ( a > b ) then print("a 大于 b" ) else print("a 小于等于 b" ) end
print("逻辑运算符展示") a = false b = true
if ( a and b ) then print("a and b - 条件为 true" ) else print("a and b - 条件为 false" ) end
if ( not( a and b) ) then print("not( a and b) - 条件为 true" ) else print("not( a and b) - 条件为 false" ) end
print("运算符优先级展示") a = 20 b = 10 c = 15 d = 5
e = (a + b) * c / d;-- ( 30 * 15 ) / 5 print("(a + b) * c / d 运算值为 :",e )
e = ((a + b) * c) / d; -- (30 * 15 ) / 5 print("((a + b) * c) / d 运算值为 :",e )
e = (a + b) * (c / d);-- (30) * (15/5) print("(a + b) * (c / d) 运算值为 :",e )
e = a + (b * c) / d; -- 20 + (150/5) print("a + (b * c) / d 运算值为 :",e )