1、变量:
使用local关键字修饰的变量是局部变量,没有local修饰的变量是全局变量。
2、数据类型:
数值类型(顾名思义,就是数),布尔类型(真和假),字符串类型(字符,和字符串),自定义类型(lua利用自定义类型与C进行交互),函数类型(函数可以赋值给一个变量,也可以作为参数传递给其他的函数),线程类型(每个线程拥有自己独立的栈,局部变量,指令指针),表类型({}表示,实现一组关联数组类型),nil类型(没有任何有效值的情况)。
3、type函数:
返回已定变量或数值的类型。例:print(type(100)) ----number,print(type(true)) -------boolean。
4、逻辑运算符
a and b -- 如果a 为false,则返回a,否则返回b
a or b -- 如果a 为true,则返回a,否则返回b
一个很实用的技巧:如果x 为false 或者nil 则给x 赋初始值v
x = x or v 等价于 if not x then x = v end
and 的优先级比or高。C语言中的三元运算符a ? b : c在Lua中可以这样实现:(a and b) or c5、repeat循环语句:
[initialization]
repeat
--body
[iteration]
until termination
首先执行循环,再判断条件。
6、表类型:
表本身是一种基于“键值对”字典结构,表类型可以描述数组、链表、队列和字典(或Map)等。
6.1、字典:(key-value)
s={id="100",name="Tony",age=18}
for k,v in pairs(s) do
print(k..":"..v)
end
字典结构的table遍历,用pairs,不用ipairs。ipairs函数返回数组索引(i)和值(v)。
6.2、数组:
local s={"张三","李四","王五"}
for i=1,#s do
print(i..":"..s[i])
end
#s是获取数组s的长度。
6.3、字符串:
string.sub(s,n,m) 截取从第n个字符到第m个字符之间的字符串。
string.lower(s) -----转小写
string.upper(s) -----转大写
string.rep(s,3) -----重复3次
string.reverse(s) ----翻转
local i,j= string.find(s,"hello") --在s中查找hello,返回值i,j为初始位置与结束位置。
string.format(" ",...) ----格式化输出
7、函数
可以有全局函数,局部函数,函数还可以作为一个值传递。
8、闭包函数
Lua中,支持函数类型,能够将函数作出参数或返回值传递。支持函数嵌套。满足闭包函数的条件。