一元操做符
x ^ 0.5 x ^ (-1 / 3) -- x 的三次方再求导 10 % 3 = 1 -- 余数计算 x % 1 -- 获得的是 x 的小数部分 x - x % 1 -- 获得的是 x 的整数部分 x - x % 0.01 -- 对几位小数进行取余,就获得几位小数 + 整数
返回获得的结果都是布尔值,非真即假数组
print(nil == nil)
对于 table, userdata, function ,lua 是作引用比较的,当他们引用同一个对象的时候,他们才是相等的。函数
a = {} a.x = 1 a.y = 0 b = {} b.x = 1 b.y = 0 c = a print(type(a == b)) print(type(a == c))
比大小的关系操做符,能够对数字和字符串进行比较。测试
与条件控制语句同样,全部的逻辑操做符将 false, nil 视为假,其余全部类型视为真lua
and
print(2 and 4) -- 2 print(nil and 4) -- nil print(false and 4) -- false print(4 and false) -- false
or
print(2 or 4) -- 4 print(nil or 4) -- 4 print(false or 4) -- 4 print(4 and false) -- 4
短路操做
-- 习惯写法1 -- 用于当 x 没有值时,赋值一个默认值 print(x=x or v) -- 等价于 if not x then x = v end -- 习惯写法2 print(a and b or c) -- 相似 C 语言中 ,a 为真获得 b, 不然就为 c a ? b : c -- 习惯写法3 -- 比较两个数中的较大者 max = (x > y) and x or y
not
print(not nil) -- true print(not false) -- true print(not true) -- false print(not 0) -- false print(not "0") -- false print(not not nil) -- false
print("a" .. "b") print("a" .. "12" .. "b")
一级优先
二级优先
三级优先
四级优先
五级优先
六级优先
七级优先
八级优先
在二元操做符中除了 指数运算符 ^ 和链接操做符 .. 是右结合的,其余全部操做符都是左结合的,能够用括号() 显示指定运算顺序指针
初始化数组
days = {} days = {"Sunday", "Monday", "Thusday", "Wednesday", "Thursday", "Friday", "Staurday"} print(days[1]) -- "Sunday"
初始化记录风格的 table
a = {x = 10, y = 20} -- 等效于 a = {}; a.x = 10; a.y = 20
添加或删除某个字段
w = {x = 0, y = 0, label = "console"} x = {math.sin(0), math.sin(1), math.sin(2)} w[1] = "another field" w.x = nil
链表
每一个节点包括两部分code
-- 建立链表 list = nil for line in io.lines() do list = {next = list, value = line} end local l = list while l do print(l.value) l = l.next end
使用记录方式的建立 + 链表 混合使用
polyline = {color = "blue", thickness = 2, npoints = 4, {x = 0, y = 0}, {x = -10, y = 0}, {x= 0, y = 1} } print(polyline[2].x) -- -10 print(polyline["color"]) -- "blue"
[] 显式初始化索引值
opnames = {["+"] = "add", ["-"] = "sub", ["*"] = "mul", ["/"] = "div"} i = 20; s = "+" a = {[i + 0] = s, [i + 1] = s..s, [i + 2] = s .. s .. ss} print(opnames[s]) -- add print(a[22]) -- +++ {x = 0, y = 0} -- 等效于 {["x"] = 0, ["y"] = 0} {"r", "g", "b"} -- 等效于 {[1] = "r", [2] = "g", [3] = "b"} {[0] = "r"} -- 不建议以 0 做为索引,由于 lua 中不少函数都假设数组起始索引是从1开始的 -- 最后一个元素后的逗号是可选的,合法的 {[0] = "r", [1] = "g" ,} -- 能够在构造式中用分号代替逗号 {[0] = "r"; [1] = "g"}