为什么非布尔值不在布尔表达式中隐式转换?
Why are non-boolean values not implicitly converted in boolean expressions?
一些编程语言评估
5 == true
为真,或允许
if 5 then expr
通过将 5 转换为布尔值。
茱莉亚没有。为什么?
因为它们不一样。
更详细。
数字和真值(布尔值)的概念是不同的。这两个东西之间没有概念映射。当计算机创建映射时,它会为每个布尔状态赋予一个 任意 数字符号。数学中没有任何内容可以说明令牌 FALSE
应该映射到什么数字。一个相当合理的映射是:
- 错误
- 正确
- 找不到文件
有一个常见的 computing 约定,即 FALSE
应映射到零,而 TRUE
应映射到一...或负一...或其他……或其他一切。但这不是硬性规定,没有数学基础。
这不仅限于 Julia。
因为 ==
是一个 equivalence relation.
在 Julia 中,true
转换为整数时变为 1
,因此 1 == true
。如果 true == 5
,那么为了 ==
保持传递性,这意味着 1 == 5
一些编程语言评估
5 == true
为真,或允许
if 5 then expr
通过将 5 转换为布尔值。
茱莉亚没有。为什么?
因为它们不一样。
更详细。
数字和真值(布尔值)的概念是不同的。这两个东西之间没有概念映射。当计算机创建映射时,它会为每个布尔状态赋予一个 任意 数字符号。数学中没有任何内容可以说明令牌 FALSE
应该映射到什么数字。一个相当合理的映射是:
- 错误
- 正确
- 找不到文件
有一个常见的 computing 约定,即 FALSE
应映射到零,而 TRUE
应映射到一...或负一...或其他……或其他一切。但这不是硬性规定,没有数学基础。
这不仅限于 Julia。
因为 ==
是一个 equivalence relation.
在 Julia 中,true
转换为整数时变为 1
,因此 1 == true
。如果 true == 5
,那么为了 ==
保持传递性,这意味着 1 == 5