Lua中的操作符and和操作符or与三元运算其实有点类似
操作符【and】而言,第一个操作数如果是false,那么就返回第一个操作数,否则返回第二个操作数
例如
4 and 5 --》5
false and 5 --》flase
操作符【or】类似与【and】,不过他是第一个操作数是否为true,是true返回第一个操作数,不是则返回第二个;
例如
4 or 5 --》4
false or 5 -->5
这很有趣,决定返回值的是第一个操作数,操作符or的功能类似于,当第一个操作数没有赋值的时候给一个值(即第二个操作数)
另外 类似与三元运算的写法是 ( a and b ) or c 这种类似于a? b:c,不过这个写法成立的前提是,b不为假;
例如
(x>y) and x or y ==x>y?x:y
如果其中 and之后的x改为false,那么这个写法就不相等了
(x>y) and false or y
若 x>y 则结果为 y
这里就出现了偏差。
同时 ,and 操作符的优先级大于or 所以可以不用括号直接写 a and b or c等价于( a and b ) or c
操作符【not】只返回true和false,除了nil和值为false的操作数外,大部分操作数返回的都是false;即大部分都是ture;
操作符【..】,是字符串连接符,拼接两个字符串,类似js中对字符串的的【+】,其中,两个数字之间使用【..】也会被直接拼接成字符串
例如
“hello ” .. "world" ==>hello world
0 .. 1 ==>01
另外,操作符【..】不会改变原来的操作数,而是创建新的字符串
操作符优先级,从上往下
【^】
【not】【#】【-】(负号)
【*】【/】【%】
【+】【-】
【..】
【<】【>】【<=】【>=】【~=】【==】
【and】
【or】
其中,
x^2*8==(x^2)*8
-x^2==-(x^2)