Lua表达式

来源:互联网 发布:面包车拉货选什么软件 编辑:程序博客网 时间:2024/06/15 21:58

Lua表达式


1:算式操作符

算式操作符 说明 + 加法 - 减法 * 乘法 / 除法 ^ 指数 % 取模
print(1 + 1)       -->output 2print(5 / 10)      -->output 0.5。 这是Lua不同于c语言的print(5.0 / 10)    -->output 0.5。 浮点数相除的结果是浮点数-- print(10 / 0)   -->注意除数不能为0,计算的结果会出错print(2 ^ 10)      -->output 1024。 求210次方local num = 1357print(num % 2)       -->output 1print((num % 2) == 1) -->output true。 判断num是否为奇数print((num % 5) == 0)  -->output false。判断num是否能被5整数

2:关系操作符

关系操作符 说明 < 小于 > 大于 <= 小于等于
=
大于等于 == 等于 ~= 不等于
2.1:返回结果

所有的这些操作符的运算结果都是truefalse

2.2:== 和 ~=

==用于相等性测试,操作符~=用于不等性测试。

这2个操作符可以用于任意2个值。

如果2个比较的值是不用的类型,lua就认为他们是不相等的。

    print("a" == 3)     --> output  false

如果2个比较的值是同一种类型的,则根据类的大小规则的比较。

    print(1 == 2)       --> output  false    print("a" == "a")   --> output   true

注意nil只与其之身相等

    print(nil == nil)      --> output  true    print(nil == "false")  --> output  false
2.3:复杂的数据类型table,usedata的比较

对于table,usedata和函数(function),lua是做引用的比较,也就是说,只有他们的引用是同一个对象的时候,才认为他们是相等的。

    a = {}    a.x = 1    a.y = 0    b = {}    b.x = 1    b.y = 0    c = a    print(c == a)      -->output true    print(c == b)      -->output false    print(c ~= b)      -->output true

3:逻辑操作符

逻辑操作符 说明 and 逻辑与 or 逻辑或 not 逻辑非

Lua 中的 and 和 or 是不同于 c 语言的。在 c 语言中,and 和 or 只得到两个值 1 和 0,其中 1 表示真,0 表示假。而 Lua 中 and 的执行过程是这样的:

  • 与控制语句一样,所有的逻辑的操作符将false和nil视为假,而将讲其他的任何视为真

  • a and b 如果 a 为 nil或false,则返回 a,否则返回 b
    (如果它的第一个操作数为假,就返回第一个操作数;否则返回第二个操作数)

  • a or b 如果 a 为 nil,则返回 b,否则返回 a(如果它的第一个操作数为真了,就返回第一个操作数了,否则返回第二个操作数)

print(4 and 5)        -->output 5print(nil and 13)     -->output nilprint(false and 13)   -->output falseprint(4 or 5)         -->output 4print(false or 5)     -->output 5

4:字符串连接

4.1:

要在lua连接2个字符串,可以使用操作符 “..” (2个点)。如果其任意一个操作符是数字的话,lua会将这个数字转换为一个字符串

print("hello " .. "world")     -->output  hello worldprint(0 .. 1)                  -->output  01
4.2:

lua中的字符串是不可变的值(immutable value)。连接操作符只会创建一个新的字符串,而不会对原操作数进行任何修改。

a = "hello"print(a .. " world")           -->output hello world print(a)                       -->output hello
4.3:

由于 Lua 字符串本质上是只读的,因此字符串连接运算符几乎总会创建一个新的(更大的)字符串。这意味着如果有很多这样的连接操作(比如在循环中使用 .. 来拼接最终结果),则性能损耗会非常大。在这种情况下,推荐使用 table 和 table.concat() 来进行很多字符串的拼接,例如:

local pieces = {}for i, elem in ipairs(my_list) do    pieces[i] = my_process(elem)endlocal res = table.concat(pieces)

5:优先级

优先级 ^ not # -
    / %
    -
.. < > <= >= ~= == and or
a + i < b/2 + 1       <-->   (a+i) < ((b/2) + 1)5+x^2*8               <-->   5+ ((x^2)*8)a<y and y<=z          <-->   (a<y) and (y<=z)-x^2                  <-->   -(x^2)x^y^z                 <-->   x^(y^z)
  • 在二元操作符中,除了指数操作符”^” 和连接操作符 “..” 是”右结合”的,其他的都是”左结合”

6:table构造式(table constructor)

table的构造式有3种方式。

(1)空构造方式,用于创建一个空的table,构造式还可以用于初始化数组。

days = {"sunday","moday","tuesday","wednesday","thursday","friday","saturday"}print(days[1])       -->output  sunday

(2)lua还提供了一种特殊的语法用于初始化记录风格的table

a = {x = 10,y = 20}  -- 等效下面的代码a = {} a.x = 10a.y = 20

(3)在一个构造式中还可以用分号代替逗号。通常会将分号用于分隔构造式中不同的成分。例如将列表部分与记录部分明显的区分开来:

{x=10 ,y =45 ; "one" , "two" , "three"} 

7:三目运算符实现

lua中 三目运算符的实现

a ? b : c
(a and b) or c

a为true 则 (a and b) <==> b

a为false 或 nil时 (a and b) <==> a

又 a or c <==> a

所以

(a and b) or c <==> a ? b : c
原创粉丝点击