Lua学习
- 轻量级嵌入式脚本语言
- 动态类型语言
语法
数据类型
nil boolean number string userdata function thread table
使用type()
返回类型Boolean
- boolean和nil都被看做false
- 0和空串被看做true
Number
- 全部用浮点表示
- 16进制表示也可以用2进制指数方式
0x2.2p2
等于(2+2/16)*2^2
String
- String不能被修改,替换其中字符后会创建一个新字符串
- Lua自动处理字串内存分配问题,直接操作超长字串也OK
- 使用
#string
来查看字串长度 - 使用
[==[....]==]
来包含字面文字(Literal Text)
其中=可以是0个或任意多个 - 使用
..
来连接字串 - string转number:
tonumber()
number转string:tostring()
Table
- Table是对象
- 变量指向Table的引用
- Table存储键-值对
创建Table:a={}
赋值:a["x"]=10
a.x
和a["x"]
是相同的,注意第二项的x是字串值,不是变量名- Lua的array从1开始,不是从0开始
- 对于没有洞(中间没有nil项)的Table(可以称之为Sequence),用
#a
来获取长度(或者说最后一项的index)
Function
- Function可以被当做变量,参数和返回值
- Lua可以调用C函数
Userdata和Thread
N/A
表达式
算术表达式
+, -, *, /, ^, %, -(负号)
全部操作都是针对浮点数
支持浮点的求模, a%b==a-math.floor(a/b)*b关系表达式
<, >, <=, >=, ==, ~=
不同类型不相等
table和userdata类型,引用同一个对象才相等
大小仅用于number和string类型逻辑表达式
and, or, not
and和or使用短路方式x=x or v
a and b or c –相当于C语言的a?b:c
连接表达式
..
支持数字的连接,但要在前后加空格长度表达式
#
仅对序列(sequence)有效优先级
优先级 | 操作符 |
---|---|
0 | ^ |
1 | not # -(neg) |
2 | * / % |
3 | + - |
4 | .. |
5 | < > <= >= ~= == |
6 | and |
7 | or |
只有^和..是右结合性
- table构造器
a={"xxx","yyy","zzz"}
按数字index初始化a={x=10,y=20}
按键值对初始化a={["x"]=10,[1]="xxx"}
初始化的标准形式
语句
- 支持用逗号分隔的多重赋值:
a,b=10, 2*x
可以用这个形式交换数据:a,b=b,a
虽然没有单独赋值快,但可以接受函数返回多个返回值 - 局部变量:
local i =1
控制结构
if a<0 then a=0 end if a<b then a=b else b=a end if .. then .. elseif .. else .. end
while … do … end
repeat … untilfor var= start, end, [step] do … [break] … end
for k,v in pairs(t) do … end
return只能放在每个代码块的最后,想插入return可以写成
do return end
goto可以跳到标签,但不可以跳进块,也不可从函数跳出。标签的写法:🏷️:
函数
- 仅有一个参数,且参数是字面量字符串或者表构造器的时候,可以省略():
print "hello world"
f{x=10,y=20}
注释
--这是一个单行注释
–[[
这是一个多行注释
–]]
—[[
加一个小杠可以取消多行注释,很方便
–]]
进阶
待补充
获取和安装
官网下载安装包->make macosx install
lua运行环境
脚本运行
#!/usr/local/bin/lua
lua解释器
lua -i -e "嵌入式lua语句" -l库 脚本名 脚本参数
-e后面跟嵌入式lua语句
-l后面跟库
-i是运行完脚本后打开交互式环境arg[-3]=”lua”, arg[0]=脚本名,arg[1]=arg1…
Q&A
- Q:Lua的基本特征是什么?
A:Lua的基本特征是…