12.特殊语法

  1. 12.特殊语法
    1. 12.1 知识点
      1. 多变量赋值
      2. 多返回值
      3. and和or的特性
    2. 12.2 知识点代码

12.特殊语法


12.1 知识点

多变量赋值

  • 多变量赋值语法:变量1,变量2,…变量n = 值1,值2,…值n
  • 示例:
    a, b, c = 1, 2, 3
    print(a) --1
    print(b) --2
    print(c) --3
    
  • 如果值不够匹配变量,未匹配到值的变量会是nil
  • 示例:
    a, b, c = 1, 2
    print(a) --1
    print(b) --2
    print(c) --nil
    
  • 如果值比变量多,多出来的值没有被使用
  • 示例:
    a, b, c = 1, 2, 3, 4, 5, 6
    print(a) --1
    print(b) --2
    print(c) --3
    

多返回值

  • 多返回值语法:return 值1,值2,…值n,一般用于函数中
  • 示例:
    function Test()
        return 1, 2, 3, 4
    end
    
  • 如果返回的值比用来接的变量多,多出来的值没有被使用
  • 示例:
    a, b, c = Test()
    print(a) --1
    print(b) --2
    print(c) --3
    
  • 如果返回的值不够匹配用来接的变量,未匹配到值的变量会是nil
  • 示例:
    a, b, c, d, e = Test()
    print(a) --1
    print(b) --2
    print(c) --3
    print(d) --4
    print(e) --nil
    

and和or的特性

  • 在lua中,逻辑与and和逻辑或or不仅可以连接boolean,任何变量都可以用来连接。只有nil和false才认为是假,其他都认为是真。
  • 逻辑与and运算符在左操作数为真时返回右操作数,否则返回左操作数。口诀:都真则真,有假则假。
  • 逻辑或or运算符在左操作数为真时返回左操作数,否则返回右操作数。口诀:都假则假,有真则真。
  • 这是因为lua的逻辑运算符是短路运算的。
  • 比如and第一个数都是否了,就不用看第二个数脸色了。直接返回第一个数。否则就返回第二个数。
  • 比如or第一个数都是真了,就不用看第二个数脸色了。直接返回第一个数。否则就返回第二个数。
  • 示例:
    print(1 and 2)      -- 2,都真则真,因为1为真,所以返回2。
    print(0 and 1)      -- 1,都真则真,因为0为真,所以返回1。
    print(nil and 1)    -- nil,有假则假,因为nil为假,所以返回nil。
    print(false and 2)  -- false,有假则假,因为false为假,所以返回false。
    print(true and 3)   -- 3,都真则真,因为true为真,所以返回3。
    print(true or 1)    -- true,有真则真,因为true为真,所以返回true。
    print(false or 1)   -- 1,都假则假,因为false为假,所以返回1。
    print(nil or 2)     -- 2,都假则假,因为nil为假,所以返回2。
    
  • lua不支持三目运算符,但可以使用and和or模拟三目运算符。
  • lua中的三元运算模拟:result = (条件表达式) and 条件为真时返回值 or 条件为假时返回值。
  • 示例:
    x = 3
    y = 2
    local result = (x > y) and x or y -- 对应C#的三目运算符 x>y?x:y;
    print(result) -- 输出:3
    
  • 如果(x>y)为真,那么 (x>y) and x 会返回x,然后x再和y或一下,因为x一般不是nil或false,所以会返回x。
  • 如果(x>y)为假,那么 (x>y) and x 会返回(x>y),然后(x>y)再和y或一下,因为(x>y)为假已经是假了,所以肯定会返回y。

12.2 知识点代码

print("**********特殊用法************")


print("**********知识点一 多变量赋值************")

--多变量赋值语法:变量1,变量2,...变量n = 值1,值2,...值n
a, b, c = 1, 2, 3
print(a) --1
print(b) --2
print(c) --3

--如果值不够匹配变量 未匹配到值的变量会是nil
a, b, c = 1, 2
print(a) --1
print(b) --2
print(c) --nil

--如果值比变量多 多出来的值没有被使用
a, b, c = 1, 2, 3, 4, 5, 6
print(a) --1
print(b) --2
print(c) --3


print("**********知识点二 多返回值************")

-- 多返回值语法:return 值1,值2,...值n 一般用于函数中
function Test()
    return 1, 2, 3, 4
end

--如果返回的值比用来接的变量多 多出来的值没有被使用
a, b, c = Test()
print(a) --1
print(b) --2
print(c) --3

--如果返回的值不够匹配用来接的变量 未匹配到值的变量会是nil
a, b, c, d, e = Test()
print(a) --1
print(b) --2
print(c) --3
print(d) --4
print(e) --nil

print("**********知识点三 and和or的特性************")

--在lua中逻辑与and和逻辑或or不仅可以连接 boolean 任何变量都可以用来连接 
--只有 nil 和 false 才认为是假 其他都认为是真
--逻辑与and运算符在左操作数为真时返回右操作数,否则返回左操作数。口诀:都真则真 有假则假
--逻辑或or运算符在左操作数为真时返回左操作数,否则返回右操作数。口诀:都假则假 有真则真
-- 这是因为lua的逻辑运算符是短路运算的。
-- 短路:第一个运算条件满足就会停止计算了
print(1 and 2)      -- 2,都真则真,因为1为真,所以返回2。
print(0 and 1)      -- 1,都真则真,因为0为真,所以返回1。
print(nil and 1)    -- nil,有假则假,因为nil为假,所以返回nil。
print(false and 2)  -- false,有假则假,因为false为假,所以返回false。
print(true and 3)   -- 3,都真则真,因为true为真,所以返回3。
print(true or 1)    -- true,有真则真,因为true为真,所以返回true。
print(false or 1)   -- 1,都假则假,因为false为假,所以返回1。
print(nil or 2)     -- 2,都假则假,因为nil为假,所以返回2。

-- lua不支持三目运算符,但可以使用and和or模拟三目运算符。
-- lua中的三元运算模拟:result = (条件表达式) and 条件为真时返回值 or 条件为假时返回值
-- C#中的三目运算符语法:result = (条件表达式) ? 条件为真时返回值 : 条件为假时返回值;
x = 3
y = 2
local result = (x > y) and x or y -- 对应C#的三目运算符 x>y?x:y;
print(result) -- 输出:3
-- 如果(x>y)为真,那么 (x>y) and x 会返回x,然后x再和y或一下,因为x一般不是nil或false,所以会返回x
-- (x>y) and x ——> x
-- x or y ——> x
x = 1
y = 2
local result = (x > y) and x or y -- 对应C#的三目运算符 x>y?x:y;
print(result) -- 输出:2
-- 如果(x>y)为假,那么 (x>y) and x 会返回(x>y),然后(x>y)再和y或一下,因为(x>y)为假已经是假了,所以肯定会返回y
-- (x>y) and x ——> (x>y)
-- (x>y) or y ——> y


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏