布尔运算符

Elixir 中有两种布尔运算符:

  • 布尔运算符(他们希望 truefalse 作为他们的第一个参数)
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,这意味着只有 truefalsenil 不是布尔值)。

iex(1)> false and 1 # return false
iex(2)> false or 1 # return 1 
iex(3)> nil and 1 # raise (ArgumentError) argument error: nil
  • 放松的布尔运算符(适用于任何类型,falsenil 都不被视为 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 处理除 nilfalse 之外的所有内容在比较中为真),否则将返回第二个参数。

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

运算符 && 将始终返回第二个参数,如果它是真的。否则将分别返回参数 falsenil

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