lua的表达式大多与c相同但也有不同以及缺少的情况
同时对于一个table对象的 运算符操作可以对其元表进行修改来实现 具体在面向对象会再讲
表达式
算术操作符
lua算术操作符有 +、-、* 、/、^(指数)、%、-(负)
但是没有位操作运算符,实现为操作需要自己定义函数
关系运算符
关系运算符包含:
< > <= >= == ~= 效果与c++相同 需要注意lua只有nil 和false 为假 其余均为真包括0 和空字符
a = 0
if a then
print("true")
end
a = ""
if a then
print("true")
end
true
true
逻辑运算符
逻辑运算符包含:and or not 其与c++的原始意思相同 与假(nil false)做比较
逻辑运算符同样有短路特效(and从左往右计算条件一个为false就结束计算,or有true就结束计算)
但是 lua 的and or 有很大的不同和高级使用
and or
对于and 如果 第一个参数为假返回第一个参数否则返回第二个参数
对于or 如果第一个参数为真返回第一个否则返回第二个
因此可以对一个参数赋值默认值
lua
a = nil
b = a or 2
print(b)
2
三元式的实现:对于c的a ? b : c 这样的表达式在lua 也可以使用and or 来实现
max = (x > y) and x or y
字符串连接符
lua字符串连接符为’..’ 可以使用与字符串与数字 数字会被自动转化为字符串
table 构造式
lua 创建table 的方式即使用 一个‘{}’
同事可以在构造真申明其元素
a = { "1", "2" , "3" ,"4" , "5" , hello = "6","7"}
print(#a)
for i = 1, #a do
print(a[i])
end
for key, value in pairs(a) do
print(key.." "..value)
end
6
1
2
3
4
5
7
1 1
2 2
3 3
4 4
5 5
6 7
hello 6
对于没有索引的元素lua会为其从1开始自动创建索引
在table 创建之后都可以使用索引来对table 添加或者删除字段
语句
lua的语句基本与c相同但也有其特性,local来声明局部变量以及多重赋值
赋值
直接对一个变量赋值(其实也是一个table的字段) 或者对一个table的字段赋值
多重赋值
x, y = y, x
a, b, c = 0, 1 ---- c = nil
a, b = 1, 2, 3 ----- ignore 3
同时函数也可以返回多个值用于赋值
局部变量
j = 10
local i = 1
local 声明的变量属于一个函数体或者控制执行体或者程序块
程序中尽可能使用local变量来防止环境中的变量被覆盖
在一个程序段中都可以重新用local来覆盖一个作用域更广的变量
控制结构
if then elseif then else end
与c相同不在赘述
while do end
与c相同不在赘述
repeat until
与c相同不在赘述
for
数字型:
for var = value, targetValue, perUnit do
end
循环从value 开始以perUnit为单位递增到targetValue
当perUnit不声明时 默认为1
泛型 for 利用迭代器来遍历
for key, value in ipairs(table) do end
ipairs用于迭代数组 pairs用于任何类型的table
break return
与c相同不在赘述 注意lua 没有 continue