lua脚本语言学习
- 单行注释:–
- 多行注释:–[[ 多行注释 --]]
- 标识符区分大小写
- 在默认情况下,变量总是认为是全局的。全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil。 如果你想删除一个全局变量,只需要将变量赋值为nil。 当且仅当一个变量不等于nil时,这个变量即存在。
数据类型 | 描述 |
---|---|
nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 |
boolean | 包含两个值:false和true。 |
number | 表示双精度类型的实浮点数(对比C中的double) |
string | 字符串由一对双引号或单引号来表示,用2个方括号“[[]]”来表示“一块”字符串 |
function | 由 C 或 Lua 编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。 |
- 可以使用type函数测试给定变量或者值的类型
- 字符串连接用的是 “…” 。对一个数字字符串进行算数操作时,lua会将这个数字字符转成一个数字
- “#”放在字符串前面,用来计算字符串的长度。
- 划重点了,lua语言的表的默认初始索引一般以1开始
- 在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
- Lua 变量有三种类型:全局变量、局部变量、表中的域。Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。局部变量的作用域为从声明位置开始到所在语句块结束。变量的默认值均为 nil。
- Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。 遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作。 当变量个数和值的个数不一致时:
a. 变量个数 > 值的个数 按变量个数补足nil
b. 变量个数 < 值的个数 多余的值会被忽略
-
循环
-
while
a = 10 while(a < 20) do print(a) a = a + 1 end
-
数组for( var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 “执行体”。exp3 是可选的,如果不指定,默认为1。 )
for i=10,1,-1 do print(i) end
-
泛型for( i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。 )
--打印数组a的所有值 a = {"one", "two", "three"} for i, v in ipairs(a) do print(i, v) end
- repeat … until。循环总会执行一次
--[ 变量定义 --] a = 10 --[ 执行循环 --] repeat print("a的值为:", a) a = a + 1 until( a > 15 )
-
-
流程控制
- if语句( 控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,true和非nil为真。 )
if( 布尔表达式 1) then --[ 在布尔表达式 1 为 true 时执行该语句块 --] elseif( 布尔表达式 2) then --[ 在布尔表达式 2 为 true 时执行该语句块 --] elseif( 布尔表达式 3) then --[ 在布尔表达式 3 为 true 时执行该语句块 --] else --[ 如果以上布尔表达式都不为 true 则执行该语句块 --] end
-
函数
- 多返回值、可变参数(…)
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn) function_body return result_params_comma_separated end
-
算数运算符(+、-、*、/、%、^)
-
关系运算符(==、~=、>、<、>=、<=)
-
逻辑运算符(and、or、not)
-
其他运算符(…(连接两个字符串)、#(一元运算符,返回字符串或表的长度))
-
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。
-
Lua提供了一个名为require的函数用来加载模块 。
require("<模块名>") 或者 require "<模块名>"
- 文件I/O,分为简单模式、完全模式。简单模式和C差不多,完全模式使用外部的文件句柄来实现,它以一种面向对象的方式,将所有的文件操作定义为文件句柄的方法。