Lua基础
- Lua没有main的概念,只能嵌入到一个宿主程序中工作,这个宿主程序被称作embedding program 或 host.
\ddd
: ddd是一串最多三位的十进制数字, 用来描述一个字符. \10
, 如果该字符后面接一个数字5,则\0105
- 下面五种描述了完全相同的字符串:
a = “abc\n123”;
a = [[abc
123]];
a = [==[ -- [后面立刻跟了一个换行符被忽略
abc
123]==];
- 长注释
--[ .......
... ]
- 换行
这种类型的字符串可以包含多行,且不会解释转义序列;如果第一个是换行符会自动忽略;
[[
/type
...
]]
基础数据类型
nil
,number
,string
,boolean
(nil
,false
为假其它都为真包括0),function
,userdata
userdata
特性:- 用来将任意C数据保存在Lua变量中,该类型仅被定义了赋值和相同性判断;
- 使用metatable, 可以为userdata自定义一组操作,;
- 不能在Lua中创建出来, 也不能在Lua中修改, 只能通过API;
thread
:table
:- 可以用任何东西做索引, 可以包含任何类型的值(nil除外);
a.name
来表示a[“name”]
;
注:
table
,function
,userdata
,thread
变量本身不会真正的存放值, 仅仅放了一个对象的引用;- 数字与字符串之间的自动转换, 需要完全掌握数字怎么转换成字符串, 可以使用字符串库中的format函数;
- 三种变量: 全局, 局部, table域
对全局和table域的访问的含义可以通过metatable
来改变,如t[i]
等效于gettable_event(t,i)
;
全局变量:
- 是放在一个特定的lua table域中, 这个table叫做
environment table
简称环境, 每一个函数都有对一个环境的引用, 函数可见的全局变量都放在这个函数所引用的环境表里, 可以调用getfenv
取得环境,setfenv
改变环境。 - 对全局变量x的访问等价于
_env.x
, 又等价于gettable_event(_env, x)
Chunk
Lua的一个执行单元, 一个Chunk
就是一串语句段, 每个语句段以分号结束;
Lua把一个Chunk
当作一个拥有不定参数的匿名函数, 因此Chunk
可以定义局部变量, 接收参数, 和返回值;Block
语句块, 语法上说,语句块就是语句段, 一个语句块可以被显式的写成一个单独的语句段do block end
assignment
赋值
多个变量以,
分开, 左边多的变量会被赋成nil
, 右边多的变量会忽略, 赋值是先运算完再进行赋值;metatable
改变全局table
域中的赋值操作:t[i] = val;
等价于settable_event(t,i,val);
对于全局变量的赋值x=val;
等价于_env.x = val;
即settable_event(_env, “x”, val);
控制语句
while exp do block end;
repeat block until exp;
if exp then block {else if exp then block} end;
return [explist]
用于从函数或chunk中返回值, 且返回的值个数不止一个;- break用于从while/for/repeat中跳出循环;
注
break
/return
必须用于一个语句块的最后一句,即chunk
最后一句end
前until
前else
前, 如果要在一个语句块的中间return
或 break
, 则可以do break end
;
for
- 数字形式
for v= start, end,