lua语法介绍(二)
一.语法简要
在学习任何语法之前,我们都需要知道该门语言是怎样定义的,是怎样运行的,话说白了,就是到了人家的山头得唱人家山头的歌。下面介绍lua的语法
1.变量的定义
特点:
1.变量在使用前必须声明,给一个变量赋值后即创建了这个变量
2.删除一个变量只需将其变量赋值为nil 即可
3.访问一个没有被初始化的变量不会出错,得到的结果是nil
--- 全局变量 a = 10 --- 局部变量 local b = 20
--- 应尽可能的使用局部变量,它有2个好处
-- 1.避免命名冲突
-- 2.访问局部变量的速度比全局变量更快
2.数据类型的定义
--- nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 b = nil print(b) --- boolean 包含两个值:false和true。 flag = false; print(flag) --- number 表示双精度类型的实浮点数 num = 10.0; print(num) --- string字符串由一对双引号或单引号来表示 str = "hello world"; print(str) --- 用#号来表示字符串的长度 print("字符串长度" ..#str); --- 字符串和数字进行算术操作 print("12" + 12); --- 字符串之间进行连接 print("12" .. "12");
3.table 的定义
table在lua中是一个关联数组,什么意思呢?其实是在这个数组中设置的有key和value,如果你没设置key,那么key是自增的。
key的类型可以有:数字,字符串或者是表
value是你要存入的值
--- 1. 创建1个空的table local tab1 = {}; print(tab1); --- 2.直接初始化表 local tab2 = { "java", "scala", "ruby", "lua" }; --- 3.遍历tab for key, val in pairs(tab2) do print(key, val); end
======= 打印结果
1 java
2 scala
3 ruby
4 lua
4.语法
1.if 判断语句
--- Lua if 判断语句 -- if 语句 -- if ... else 语句 -- if 嵌套语句
a = 10; if a == 10 then print("if 语句 a 的值为:",a) end
if a < 10 then print("a 小于10 的值为:",a) else print("a 大于10 的值为:",a) end
if a > 5 then if a < 10 then print("a的值是大于5 小于10") end else if a < 8 then print("a的值是大于5 小于8") end end
2.循环语句
--- Lua 循环 -- while 循环 -- for 循环 -- repeat..until -- 循环嵌套循环 while(true) do print("while 的循环语句") end for i = 1, 10 do print("i 的值为:",i) end a = 10; repeat print("a 的值为:",a) a = a + 1; until(a > 15)
--- 注意循环条件判断语句(condition)在循环体末尾部分,所以在条件进行判断前循环体都会执行一次, --- 如果条件判断语句(condition)为 false,循环会重新开始执行,直到条件判断语句(condition)为 true 才会停止执行 for i= 1,3 do for j = 1,3 do print(i,j) end end
5.函数
lua中的函数有 2种用途:
1.完成指定任务。这种情况下函数作为调用语句使用
2.计算并返回值。这种情况函数作为赋值语句的表达式使用
-- 例:完成指定的功能 function max(num1,num2) if(num1 > num2) then result = num1 else result = num2; end return result; end print("两个数中的最大值是:",max(10,4)); -- 例:将返回值返回 myParameter = function(param) print("这是打印函数:",param) end function add(num1,num2,fun) result = num1 + num2; fun(result); end print("函数传参调用 ======================================") myParameter(10); add(2,5,myParameter);
--- 调用add函数,第1、2个参数为数字,第三个为函数,先将add函数中传入的第1、2个参数计算的结果传入到第3个函数中,作为参数调用第3个参数函数
6.函数的多返回值情况和参数中可变参数情况
-- 函数的多返回值 function maxValueAndIndex(tab) local maxIndex = 1; -- 最大值索引 local maxValue = tab[maxIndex] -- 最大值 for i,val in pairs(tab) do if val > maxValue then maxIndex = i; maxValue = val; end end return maxIndex,maxValue; end tab={1,3,10,9,8} print(maxValueAndIndex(tab)); -- 3 10 --- 可变参数 function add(...) local s = 0 ; for i,v in pairs{...}do s = s + v; end return s end print(add(3,7,8,9,10)); -- 求可变参数中参数的个数 function average1(...) result = 0 local arg = {...} for i, v in ipairs(arg) do result = result + v end print("传入的参数个数是:"..#arg); return result/#arg end print("平均值是:",average1(3,7,8,9,10)) -- 也可以通过"select#" 来获取可变参数的个数 function average2(...) result = 0 local arg = {...} for i, v in ipairs(arg) do result = result + v end print("传入的参数个数是:"..select("#",...)); return result/select("#",...) end print("平均值是:",average2(1,3,5,6,9,10));
二.数学运算符
1.算术运算符
local a = 10; local b = 20; print("=========== 数学运算符 ===================") print("a + b =",a + b ); print("a - b =",a - b ); print("a * b =",a * b ); print("a / b =",a / b ); print("a % b =",a % b ); print("a ^ b =",a ^ b ); print("- b =",-b ); if (a > b)then print("a 的值大于b") else if(a == b)then print("a 的值 == b") else if a< b then print("a 的值小于b") else if( a~= b)then print("a 的值不等于b") end end end end
2.逻辑运算符
local a = true; local b = false; --- lua 逻辑运算符 and or not --- a and b result -- true and true true -- true and false false -- false and true false -- false and false false --if a then -- return print(false and false); --end print("====== or ==========="); --- a or b result --- true or true true --- false or true true --- true or false true --- false or false false -- --if true then -- return print(false or false) --end print("====== not ==========="); --if true then -- return print("false not:",not false) --end
3.其它操作符
--- lua 其它操作符 -- .. 连接2个字符串 -- # 一元运算符,返回字符串的长度或表的长度 a = "hello" b = "world" print("连接2个字符串:",a..b); print("字符串b的长度是:",#b);
由于本人是自己学习总结出来的,有不足之处,请各位看官批评指出,我将及时改正,以提高知识总结的正确性和严谨性,为大家学习提供方便!!!
如若转载,请注明出处!!!