布尔运算符
Elixir 中有两种布尔运算符:
- 布尔运算符(他们希望
true
或false
作为他们的第一个参数)
x or y # true if x is true, otherwise y
x and y # false if x is false, otherwise y
not x # false if x is true, otherwise true
如果第一个参数不是严格的布尔值,那么所有布尔运算符都会提升 ArgumentError
,这意味着只有 true
或 false
(nil
不是布尔值)。
iex(1)> false and 1 # return false
iex(2)> false or 1 # return 1
iex(3)> nil and 1 # raise (ArgumentError) argument error: nil
- 放松的布尔运算符(适用于任何类型,
false
和nil
都不被视为true
)
x || y # x if x is true, otherwise y
x && y # y if x is true, otherwise false
!x # false if x is true, otherwise true
运算符||
将始终返回第一个参数,如果它是真实的(Elixir 处理除 nil
和 false
之外的所有内容在比较中为真),否则将返回第二个参数。
iex(1)> 1 || 3 # return 1, because 1 is truthy
iex(2)> false || 3 # return 3
iex(3)> 3 || false # return 3
iex(4)> false || nil # return nil
iex(5)> nil || false # return false
运算符 &&
将始终返回第二个参数,如果它是真的。否则将分别返回参数 false
或 nil
。
iex(1)> 1 && 3 # return 3, first argument is truthy
iex(2)> false && 3 # return false
iex(3)> 3 && false # return false
iex(4)> 3 && nil # return nil
iex(5)> false && nil # return false
iex(6)> nil && false # return nil
&&
和||
都是短路运算符。如果左侧不足以确定结果,它们仅执行右侧。
运算符 !
将返回当前项的否定的布尔值:
iex(1)> !2 # return false
iex(2)> !false # return true
iex(3)> !"Test" # return false
iex(4)> !nil # return true
获取所选术语的布尔值的简单方法是简单地将此运算符加倍:
iex(1)> !!true # return true
iex(2)> !!"Test" # return true
iex(3)> !!nil # return false
iex(4)> !!false # return false