首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么数字\布尔值是一个数字?

为什么数字\布尔值是一个数字?
EN

Stack Overflow用户
提问于 2019-05-13 17:47:41
回答 3查看 168关注 0票数 1

我对长生不老药很陌生,但我却找不到答案。下面是我在iex中输入的一些例子。

代码语言:javascript
复制
expression   result
9 || true    9
true || 9    true
9 && true    true
true && 9    9

因此,当存在||时,它将计算为第一个参数,而当一个参数不是布尔值时,&&将计算为持久。||&&是如何实现的?他们为什么要返回这些结果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-13 19:33:56

这是短路布尔逻辑上下文中的一个通用语言工具.要删除一些有用的示例的伪代码:

代码语言:javascript
复制
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

如果您的&&||只返回布尔值,则无法在单个操作中同时进行分支和计算。

票数 4
EN

Stack Overflow用户

发布于 2019-05-14 13:24:28

虽然查尔斯的回答是正确的,但它并不能说明全部情况。通常,Elixir有两组不同的操作符,用于处理“布尔尼什”值:

  • &&|| --这些工作适用于所有类型,字面意思是实现以下目的的快捷方式: 大小写左do #等价于左&&当x为零时右x,假-> x_ ->右端
  • andor只在truefalse原子上工作,如果提供其他任何东西,BadBooleanError就会失败。

正如人们所说,这两个算子都是短路的,这意味着一旦结果明显,这些运算就会减少计算。

票数 3
EN

Stack Overflow用户

发布于 2019-05-14 13:28:38

编程语言实现了真值和假值类型的概念,以便在布尔逻辑中使用它们。一些值被认为是假的,而另一些值在布尔运算中被认为是正确的,而函数的最后一个值--或表达式--被返回这一事实使我们能够短路,并且像前面的答案中提到的那样将我们的函数分支。

我知道的每一种语言都是如此。

在Elixir (用Erlang/OTP 21编译的1.7.3)中,我认为我们的行为是一致的,即使是零号:

代码语言:javascript
复制
(0 || false) == 0 # true
(0 || false) === 0 # true

与之相比,在Javascript (谷歌Chrome v74)中:

代码语言:javascript
复制
(0 || false) == 0 // true
(0 || false) === 0 // false
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56117467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档