Julia 中的布尔值在计算中使用时具有数值(false= 0、true= 1)。
以下所有内容均达到预期结果:
\ntrue + false # 1\nfalse - true # -1\nfalse / true # 0.0\ntrue \xc3\xb7 false # DivideError: integer division error\n0 \xc3\xb7 1 # 0\nRun Code Online (Sandbox Code Playgroud)\n除了:
\nfalse \xc3\xb7 true # false\nRun Code Online (Sandbox Code Playgroud)\n那么为什么false \xc3\xb7 true评估为false, 而不是0like0 \xc3\xb7 1呢?
更新:看来乘法具有相同的行为:
\nfalse * true # false\nRun Code Online (Sandbox Code Playgroud)\n我可以理解,类型的行为可能Bool与其他数字类型不同,但奇怪的是,加法和减法的行为与乘法和除法不同。
数学运算文档指出:
\n\n\n请注意,Bool 是整数类型,所有常用的提升规则和数字运算符也都在其上定义。
\n
因此,它没有在所有算术上下文中将布尔值视为整数,这有点令人惊讶。
\n正如@DNF 指出的,该div()决策是用布尔逻辑实现的。
具体方法定义位于 Julia 源代码树的基本代码中 ( julia/base/bool.jl)。
加法和减法转换Bool为Int:
+(x::Bool, y::Bool) = Int(x) + Int(y)
-(x::Bool, y::Bool) = Int(x) - Int(y)
Run Code Online (Sandbox Code Playgroud)
但除法不会:
div(x::Bool, y::Bool) = y ? x : throw(DivideError())
Run Code Online (Sandbox Code Playgroud)
我仍然觉得有点奇怪,并非所有Bool操作都被视为数字类型,但显然它就是这样的。
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |