elixir:为什么两个布尔运算符为同一操作 eelixir似乎每个操作都有2个布尔运算符: || , 或者 && , 和 等等。唯一的区别是,对于或等等,第一个论点本身必须是布尔人。什么是...

问题描述 投票:0回答:2
ETC。唯一的区别是,对于

or, and

等,第一个论点本身必须是布尔人。这些第二组运算符的意义是什么?
	
根据basic Operators

|| , &&
elixir
2个回答
13
投票
or

是短路操作员。他们只执行权利 侧面,如果左侧不足以确定结果

要回答您的问题,
第二组运营商的意义是什么?我认为该教程非常好。

作为经验法则,当您期待时使用
and
and

or

布尔人。如果任何参数是非树状的,请使用not

&&

||

我的take

对我来说,这似乎是语言本身中最伟大的练习。
在与
llet失败的哲学上,更严格的类型可能是一个好主意。在比较情况下。提出这样的错误可能比错误地评估某些东西更好。

!

&&示例

  1. and
  2. ok,直接从万物的真理来源: Two main reasons:
写信代码:如果您期望布尔值,请使用布尔值

守卫是严格的布尔人,因此您必须在其中使用“和”或“”。



直接来自何塞·瓦利姆(Jose Valim)。

Also Peter Hamilton (credit where credit's due) pointed out this enlightening message from Robert Virding, one of the creators of Erlang:

A little bit of history and some philosophy about boolean operators
  and guards.

8
投票
警卫。最初,他们是警卫

测试

,并被认为是 将图案与无法很好的事物匹配的扩展 写为模式。测试成功或失败。 imao这个 使警卫更加一致地WRT内容和处理 故障/异常,这只是一个失败的测试。允许的时候 警卫变得复杂,他们徘徊成为后卫的表情 which return boolean values and then the guard as a whole became a 布尔表达。我认为这使解释更加困难 为什么守卫看起来和表现得像他们一样。
我将这个答案标记为社区Wiki,因为这并不是我的回答本身。

对我来说,希望拥有布尔值作为第一个参数时,当您不想将任何其他值(或数据类型)解释为true时,这是有帮助的,因为Elixir除了NIL和False以外,Elixir都会将任何东西付诸实践。用户可能要确保该参数是布尔值(是true或false),并且除了任何其他类型的值外,不要意外。
    博物运算符,例如
  1. or
  2. and
not
期望对还是错误,作为他们的第一个参数

Relaxed布尔运算符,例如

||

&&

可以接受任何类型的参数。除零或错误以外的任何其他价值都被解释为真实(真相)。

例如,例如

iex(1)> nil && 13 nil iex(2)> true && 17 17 iex(3)> true and true true iex(4)> false and true false iex(5)> 73 and false ** (ArgumentError) argument error: 73

如果你尝试

x || y # gives x if x is truthy else y x && y # gives y if x is truthy else x !x # false if x is truthy , otherwise true

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.