数据类型
-
lua是动态类型语言,每个值带有自身的类型信息。
-
默认情况下,变量总认为是全局的。
-
全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是
nil
。 -
如果想要删除一个全局变量,只需要将它赋值为
nil
。当且仅当一个变量不等于nil时,这个变量即存在。 -
使用
type
函数来获取一个值对应的类型名词。 -
在逻辑判断时,
boolean
类型的值efalse
和nil
都视为假,其他都视为真。
数据类型 | 描述 |
---|---|
nil | 只有nil属于该类,表示一个无效值(在条件表达式中相当于false) |
boolean | 包含两个值:false和true。 |
number | 相当于C语言的double,双精度浮点数 |
string | 由一对单引号或双引号表示的字符串 |
function | 由C语言或Lua编写的函数 |
userdata | 任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于协同程序 |
table | table其实是一个关联数组,数组的索引可以是数字、字符串或表类型。table的创建是通过构造表达式来完成的,最简单构造表达式是{},用来创建一个空表 |
nil
在做比较时应该加上引号,因为type(x) == nil
中,type(x)
返回的实际是"nil"
字符串,是一个string类型。
type(type(x)) == string
命令解释器
加载库
lua -l <name>
可以在命令交互模式加载一个库。
命令交互模式下,使用dofile("1.lua")
可以加载1.lua
作为库,使用其中的函数变量等。
环境配置
解释器造处理参数前,会查找名为LUA_INIT_5_3
的环境变量(应该是视lua版本来定),如果找不到,就会再查找名为LUA_INIT
的环境变量。
如果这两个变量中的任意一个存在,并且其内容为@filename
,那么解释器就会运行相应的文件;
如果变量存在但不是以@
开头,那么解释器会认为其包含lua
的代码,并会对其进行解释执行。
这样的方法可以完整地配置lua
。因而LUA_INIT
使得我们可以灵活地配置独立解释器。
例如,可以预先加载程序包、修改路径、定义自定义函数、对函数进行重命名或删除函数,等等。
$ lua script a b c
解释器在运行代码前会创建一个名为arg
的表,其中存储了所有的命令行参数。索引0中保存的内容为脚本名,索引1位第一个参数:
arg[-3] = "lua"
arg[-2] = "-3"
arg[-1] = "sin=math.sin"
arg[0] = "script"
arg[1] = "a"
arg[2] = "b"
在脚本之前的选项则位于负数索引上。
lua
支持变长参数,在脚本文件中,通过...
表示传递给脚本的所有参数。
注释
单行注释用 --
a = 100
-- a
多行注释用--[[
和--]]
--[[
ok = "ok"
--]]
no = "no"
这里一个小技巧就是在--[[
前多加一个-
,会变成---[[
,就会开启被多行注释的代码。
参考资料
参考书籍:lua程序设计(第4版), Roberto lerusalimschy 梅隆魁译