Julia中的或逻辑运算符

3

我正在试图理解Julia如何使用or运算符。以下是我正在练习的脚本:

integer = 52
if length(string(integer)) == 1 || 2
    println("length is 1 or 2")
end

但是它给了我这个错误:
TypeError: non-boolean (Int64) used in boolean context

Stacktrace:
 [1] top-level scope
   @ In[108]:2
 [2] eval
   @ .\boot.jl:373 [inlined]
 [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
   @ Base .\loading.jl:1196

我相信问题出在我写的 1 || 2 上面!在 Julia 中该如何指定它?而且,TypeError: non-boolean (Int64) used in boolean context 错误应该怎么解释?


这种行为不仅限于Julia,我能想到的每一种编程语言都会解释这样的逻辑操作。Julia会报错,但其他语言(如Python)可能会通过返回意外结果来“悄悄失败”。长话短说:在世界上的每一种编程语言中(我所知道的),每个布尔表达式都必须是自包含的...例如,len(s) == 1 || len(s) == 2。正如Bogumil所指出的那样,然而有更好的方法来实现你想要的。 - ddejohn
@ddejohn 是的,你说得对!我对此太不公平了。用那种方式写表达式太傻了!谢谢你提醒我。我删除了我的轻率判断。 - Shayan
1个回答

4

你应该写:

length(string(integer)) in [1, 2]

1 <= length(string(integer)) <= 2

更详细地说:
length(string(integer)) == 1 || length(string(integer)) == 2

当你编写代码时:

length(string(integer)) == 1 || 2

这段代码被解释为“length(string(integer))== 1”或“2”。由于字符串的长度不是1,整个表达式的值为2,而2不是Bool类型。您会收到一个错误,因为您试图在条件中使用非布尔值。

您可以通过评估以下内容来检查这确实是发生的事情:

julia> length(string(integer)) == 1 || 2
2

这种行为在Julia手册这里有解释。


哦,我太不公平了!非常感谢!我会编辑我的问题,我在不公正地评判Julia的错误日志! - Shayan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接