lua and or not 逻辑运算符

and or not

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

注:下面的和其他语法有区别
a and b -- 如果a 为false,则返回a,否则返回b
a or b -- 如果a 为true,则返回a,否则返回b

例如:
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 高。

 

C 语言中的三元运算符
a ? b : c
在Lua 中可以这样实现:
(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

原文地址:http://blog.163.com/yiba_suanzao/blog/static/130557377201432310859210/



### 逻辑运算符的使用指南 Lua 中的逻辑运算符包括 `and`、`or` 和 `not`,它们用于组合或修改布尔表达式的结果。这些运算符的行为在 Lua 中与许多其他编程语言略有不同,因为它们返回的是实际的操作数值,而不仅仅是布尔值。 #### `and` 运算符 `and` 运算符返回其操作数中的一个。如果第一个操作数为真(即非 `nil` 且非 `false`),则返回第二个操作数;否则,返回第一个操作数。这意味着 `and` 运算符可以用来实现条件赋值[^1]。 ```lua local a = true and "yes" -- a 将被赋值为 "yes" local b = false and "no" -- b 将保持为 false ``` #### `or` 运算符 `or` 运算符同样返回其操作数中的一个。如果第一个操作数为真,则返回第一个操作数;否则,返回第二个操作数。这使得 `or` 可以用于提供默认值[^1]。 ```lua local c = nil or "default" -- c 将被赋值为 "default" local d = "value" or "default" -- d 将保持为 "value" ``` #### `not` 运算符 `not` 运算符用于取反一个布尔值。它总是返回一个布尔值,无论操作数是什么类型。如果操作数为真,则 `not` 返回 `false`;如果操作数为假(即 `nil` 或 `false`),则返回 `true`。 ```lua local e = not true -- e 将被赋值为 false local f = not nil -- f 将被赋值为 true ``` #### 短路求值优化 Lua逻辑运算符支持短路求值。这意味着当结果已经确定时,不会继续评估后续的操作数。例如,在 `and` 表达式中,如果第一个操作数为假,则不需要再计算第二个操作数,因为它不会改变最终的结果。这种特性可以在编写条件语句时用来提高效率[^3]。 #### 实例 下面是一些使用逻辑运算符的实际例子: ```lua -- 使用 and 来确保变量存在后再进行方法调用 local function safeCall(obj, method) return obj and obj[method] end -- 使用 or 提供默认参数 function greet(name) print("Hello, " .. (name or "Guest")) end greet() -- 输出 "Hello, Guest" greet("Alice") -- 输出 "Hello, Alice" -- 使用 not 检查是否为空 local data = {} if not next(data) then print("data 表是空的") end ``` 通过上述示例可以看到,Lua 中的逻辑运算符不仅可以用于基本的布尔逻辑,还可以巧妙地应用于更复杂的场景,如安全访问对象属性、设置默认参数以及检查表是否为空等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值