我对长生不老药很陌生,但我却找不到答案。下面是我在iex中输入的一些例子。
expression result
9 || true 9
true || 9 true
9 && true true
true && 9 9因此,当存在||时,它将计算为第一个参数,而当一个参数不是布尔值时,&&将计算为持久。||和&&是如何实现的?他们为什么要返回这些结果?
发布于 2019-05-13 19:33:56
这是短路布尔逻辑上下文中的一个通用语言工具.要删除一些有用的示例的伪代码:
need_a_number() && calculate_number() # do the expensive calculate_number() call, and evaluate to
# its result, only if need_a_number() is truthy.
get_a_string() || "default string" # returns "default_string" if get_a_string() is falsey如果您的&&和||只返回布尔值,则无法在单个操作中同时进行分支和计算。
发布于 2019-05-14 13:24:28
虽然查尔斯的回答是正确的,但它并不能说明全部情况。通常,Elixir有两组不同的操作符,用于处理“布尔尼什”值:
&&和|| --这些工作适用于所有类型,字面意思是实现以下目的的快捷方式:
大小写左do #等价于左&&当x为零时右x,假-> x_ ->右端and和or只在true和false原子上工作,如果提供其他任何东西,BadBooleanError就会失败。正如人们所说,这两个算子都是短路的,这意味着一旦结果明显,这些运算就会减少计算。
发布于 2019-05-14 13:28:38
编程语言实现了真值和假值类型的概念,以便在布尔逻辑中使用它们。一些值被认为是假的,而另一些值在布尔运算中被认为是正确的,而函数的最后一个值--或表达式--被返回这一事实使我们能够短路,并且像前面的答案中提到的那样将我们的函数分支。
我知道的每一种语言都是如此。
在Elixir (用Erlang/OTP 21编译的1.7.3)中,我认为我们的行为是一致的,即使是零号:
(0 || false) == 0 # true
(0 || false) === 0 # true与之相比,在Javascript (谷歌Chrome v74)中:
(0 || false) == 0 // true
(0 || false) === 0 // falsehttps://stackoverflow.com/questions/56117467
复制相似问题