由 clean C 实现。须要被宿主程序调用,能够注入 C 函数。数组
Lua 的语法基于 BNF 的语法规则。数据结构
Lua 对大小写敏感。函数
C 语言中没有的关键字有:code
and
elseif
function
in
nil
local
not
or
repeat
then
until
orm
规范:全局变量如下划线开头。协程
C 语言中没有的操做符:对象
^ ~= // -- 向下取整
Lua 中没有的操做符:继承
+= -=
字符表示索引
a -- 表明字符 a \97 -- 表明字符 a \049 -- 表明数字字符 1
其余转义符表示作用域
\\n -- 表明字符串 \n \n -- 表明换行
注意数字字符必须是三位。其余字符则不能超过三位。
[[]] -- 0级长括号 [==[]==] -- 2级长括号
Lua 是动态语言,变量没有类型,值才有。值自身携带类型信息。
Lua 有八种基本数据类型:nil, boolean, number, string, function, userdata, thread, table
。
仅 nil
和 false
致使条件为假,其余均为真。
userdata
类型变量用于保存 C 数据。 Lua 只能对该类数据进行使用,而不能进行建立或修改,保证宿主程序彻底掌握数据。
thread
用于实现协程(coroutine)。
table
用于实现关联数组。table
容许任何类型的数据作索引,也容许任何类型作 table
域中的值(前述任何类型
不包含 nil)。table
是 Lua 中惟一的数据结构。
因为函数也是一种值,因此 table
中能够存放函数。
function, userdata, thread, table
这些类型的值都是对象。这些类型的变量都只是保存变量的引用,而且在进行赋值,参数传递,函数返回等操做时不会进行任何性质的拷贝。
库函数 type()
返回变量的类型描述信息。
Lua 提供数字与字符串间的自动转换。
可使用 format 函数控制数字向字符串的转换。
变量有三种类型:全局变量、局部变量、表中的域。
函数外的变量默认为全局变量,除非用 local 显示声明。函数内变量与函数的参数默认为局部变量。
局部变量的做用域为从声明位置开始到所在语句块结束(或者是直到下一个同名局部变量的声明)。
变量的默认值均为 nil。
a = 5 -- 全局变量 local b = 5 -- 局部变量 function joke() c = 5 -- 局部变量 local d = 6 -- 局部变量 end print(c,d) --> nil nil do local a = 6 -- 局部变量 b = 6 -- 全局变量 print(a,b); --> 6 6 end print(a,b) --> 5 6
方便标记,-->
表明前面表达式的结果。
对 table 的索引使用方括号 []
。Lua使用语法糖提供 .
操做。
t[i] t.i -- 当索引为字符串类型时的一种简化写法 gettable_event(t,i) -- 采用索引访问本质上是一个相似这样的函数调用
全部全局变量放在一个环境表里,该表的变量名为 _env
。对某个全局变量 a
的访问即 _env.a
(_env_
只是为了方便说明)。
每一个函数做为变量持有一个环境表的引用,里面包含该函数可调用的全部变量。
子函数会从父函数继承环境表。
能够经过函数 getfenv / setfenv
来读写环境表。