lua学习之表达式

  • 算数运算符
    一元运算符:-(负值)
    二元运算符:+ - * / ^ (加减乘除幂)

  • 关系运算符
    <    >    <=    >=    ==    ~=(相当于!=)

    这些操作符返回结果为false或者true; ==和~=比较两个值,如果两个值得类型不同,lua也认为两者不同;
    lua通过引用比较tables、userdata、functions,当且仅当两者表示同一个对象时相等

    a = {}; a.x = 1; a.y = 0
    b = {}; b.x = 1; b.y = 0
    c = a
    a==c but a~=b

    lua比较字符按字母的顺序进行,但是字母顺序依赖本地环境。混合比较数字和字符串会报错(如:2 < "1"

  • 逻辑运算符
    and    or    not

    逻辑运算符认为false和nil是假,其他为真,0也是真
    >and 和 or的运算结果不是true和false,而是和它两个操作数相关

    a and b  -- 如果 a 为 false,则返回 a,否则返回 b
    a or b -- 如果 a 为 true,则返回 a,否则返回 b

    and和or都使用“短路求值”,也就是说,它们只会在需要时才去评估第二个操作数

    print(4 and 5)  --> 5
    print(nil and 13) --> nil
    print(false and 13) --> false
    print(4 or 5) --> 4
    print(false or 5) --> 5
    -- 如果 x 为 false 或者 nil 则给 x 赋初始值 v(创建类时常用)
    x = x or v
    -- 等价于
    if not x then
    x = v
    end

    >and的优先级比or高

    a ? b : c     等价于    (a and b) or c

    >not的结果只返回false或者true

    print(not nil)  --> true
    print(not false) --> true
    print(not 0) --> false
    print(not not nil)  --> false

     

  • 连接运算符
    ..    -- 两个点

    >字符串连接,如果操作数为数字,Lua 将数字转成字符串

    print("Hello " .. "World") --> Hello World
    print(0 .. 1) --> 01

     

  • 优先级
    -- 高到低
    ^
    not - (unary)
    *  /
    +  -
    ..
    <  >  <= >= ~= ==
    and
    or

     

posted @ 2017-02-23 10:55  Jierism  阅读(263)  评论(0编辑  收藏  举报