Lua 学习记录

注释方式:(利用注释可以在IDEA中自定义注释模板)

1. 单行注释:--
2. 多行注释:--[[多行注释 多行注释--]]	
3. 多行注释推荐使用 --[=[注释内容]=],这样可以避免遇到table[table[idx]]时就将多行注释结束了。

变量命名: (尽量不要用下划线+大写的方式)

区分大小写(Lua对大小写敏感)
a=5		-- 全局变量
local b=5 	-- 局部变量

1. A~Z
2. a~z
3. _
4. 0~9

关键词

以下列出了 Lua 的保留关键字。保留关键字不能作为常量或变量或其他用户自定义标示符:

and		break		do		else
elseif		end		false		for
function	if		in		local
nil		not		or		repeat
return		then		true		until
while

Lua数据类型

数据类型	 	描述
nil		这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean		包含两个值:false和true。
number		表示双精度类型的实浮点数。
string		字符串由一对双引号或单引号来表示。
function	由 C 或 Lua 编写的函数。
userdata	表示任意存储在变量中的C数据结构。
thread		表示执行的独立线路,用于执行协同程序。
table		Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,
			table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

string(字符串)

1. 字符串由一对双引号或单引号来表示
2. 也可以用 2 个方括号 "[[]]" 来表示"一块"字符串
3. 在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字
4. 字符串连接使用的是 .. 
5. 使用 # 来计算字符串的长度,放在字符串前面
6. 转义字符用于表示不能直接显示的字符,比如后退键,回车键,等。如在字符串转换双引号可以使用 "\""

字符串操作

1. string.upper(argument):
	字符串全部转为大写字母。
2. string.lower(argument):
	字符串全部转为小写字母。
3. string.gsub(mainString,findString,replaceString,num)
	在字符串中替换,mainString为要替换的字符串,findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换)string.gsub("aaaa","a","z",3);		==> zzza    3
4. string.find (str, substr, [init, [end]])
	搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil
5. string.reverse(arg)
6. string.format(...)

table(表)

1. Lua 里表的默认初始索引一般以 1 开始
2. 数组的索引可以是数字或者是字符串
	eg: a = {}
		a.name = ""
		a.id   = 0
	eg: b = {1,2,3}
		b[2]

赋值语句

1. 应该尽可能的使用局部变量
2. 交换变量	a,b = b,a
3. 局部变量必须使用local字段,就算在函数内没有加loca也默认全局变量

循环

1. Lua 编程语言中数值 for 循环语法格式:
	for var=exp1,exp2,exp3 do  
	    <执行体>  
	end  

2. Lua 编程语言中泛型 for 循环语法格式:
	a = {"one", "two", "three"}
	for i, v in ipairs(a) do
	    print(i, v)
	end 

3. Lua 编程语言中 while 循环语法:
	while(condition)
	do
	   statements
	end

4. Lua 编程语言中 repeat...until 循环语法格式:(类似于java中的 do while)
	repeat
	   statements
	until( condition )

5. 用于退出当前循环或语句,如果使用循环嵌套,break语句将停止最内层循环的执行,并开始执行的外层的循环语句。

判断

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

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

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

函数

1. 可以将函数作为参数传递给函数
2. 可以返回多个结果值
3. 可以接受可变数目的参数,在函数参数列表中使用三点 ... 表示函数有可变的参数。
4. 可以通过 select("#",...) 来获取可变参数的数量
5. 可以通过 select(i,...) 来获取第i个参数值
   eg:  function foo(...)
	        for i = 1, select('#', ...) do  -->获取参数总数
	            local arg = select(i, ...); -->读取参数
	            print("arg", arg);
	        end
	    end

运算符

1. 算数运算符
	eg:  
		 +	加法	  	A + B 	 输出结果 30
		 -	减法	  	A - B 	 输出结果 -10
		 *	乘法	  	A * B 	 输出结果 200
		 /	除法	  	B / A 	 输出结果 2
		 %	取余	  	B % A 	 输出结果 0
		 ^	乘幂	  	A^2   	 输出结果 100
		 -	负号  	-A    	 输出结果v -10

2. 关系运算符
	操作符	  	描述													实例
	==	等于,检测两个值是否相等,相等返回 true,否则返回 false				(A == B) 为 false。
	~=	不等于,检测两个值是否相等,相等返回 false,否则返回 true			(A ~= B) 为 true。
	>	    大于,如果左边的值大于右边的值,返回 true,否则返回 false		(A > B)  为 false。
	<	    小于,如果左边的值大于右边的值,返回 false,否则返回 true		(A < B)  为 true。
	>=	    大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false(A >= B) 返回 false。
	<=	    小于等于,如果左边的值小于等于右边的值,返回 true,否则返回 false(A <= B) 返回 true。

3. 逻辑运算符	
	操作符	  	描述														实例
	and		逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。				(A and B) 为 false。
	or		逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。				(A or B) 为 true。
	not		逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。	not(A and B) 为 true。

4. 其他运算符
	..	连接两个字符串		     a..b ,其中 a 为 "Hello " , b 为 "World", 输出结果为 "Hello World"。
	#	返回字符串或表的长度。	 #"Hello" 返回 5