全局变量
- 在默认情况下,变量总是认为是全局的。
- 全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,但结果是nil。
- 删除一个全局变量,赋值为nil
Lua数据类型
Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。
boolean
- false,nil -> false
- 其他(包括) -> true
number
- double类型,可以在luaconf.h中修改
string
使用双引号、单引号表示单行字符串
string1 = "this is string1" string2 = 'this is string1'
使用
[[]]
来表示多行字符串string3 = [[ 123 321 ]]
.. 用于字符串连接
print("a".."b")
在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字
:计算字符串长度
table
- table是一个关联数组,数组的索引可以是数字或者是字符串。
- table的下标从1开始
a = { "1","2","3"}
print(a[1]) --1
b = { a = 1,b=1,c=1}
print(b[a])--nil
print(b["a"])--1
- table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。
function
- 在 Lua 中,函数是被看作是”第一类值(First-Class Value)”
- 函数可以存在变量里
- 函数可以作为参数进行传递
thread
- 在 Lua 里,最主要的线程是协同程序(coroutine),协程
- 它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西
- 线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
userdata
- userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用
Lua变量
- Lua 变量有三种类型:全局变量、局部变量、表中的域。
- Lua 变量默认初始化为nil
索引
t[i]
t.i -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 当索引为字符串类型时的一种简化写法
函数
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
optional_function_scope: 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。
function_name: 指定函数名称。
argument1, argument2, argument3…, argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。
function_body: 函数体,函数中需要执行的代码语句块。
result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。
- 函数可以作为
参数
- 可以有多个返回值
- 可变参数
function Function_Name(...)
local arg = {...} -- arg 为一个表,局部变量
select('#',...) -- 返回可变参数的长度
select(n,...) --用于返回从起点 n 开始到结束位置的所有参数列表
for i,v in ipairs(arg) do
-- dosomething
end
end
运算符
关系运算符
~=
不等于
逻辑运算符
- and or not
其他运算符
..
连接连个字符串#
返回字符串或者表的长度
字符串
- 表示方法
- 单引号间的一串字符
- 双引号间的一串字符
- [[ 与 ]] 间的一串字符
模块与包
require("<模块名>")