我很好奇语言范例是如何普遍允许普通if (x) ...
检查非零值(至少在整数变量上)?
(而不是明确要求运营商:if (x != 0)
)
受到this question的启发,被标记为与语言无关,但对于目前常用的语言来说,这甚至不是100%正确,尽管它已经足够接近了。对于弱类型语言,总是是真的吗?
(假设x已被定义,所以我们不需要担心这些或例外.x可能不一定已经初始化但是考虑一个单独的案例。)
以下是摘要:
C/C++, PERL, Python, PHP, Ruby, BASIC: Yes
C#, Java; Pascal, Modula-2 & other descendants of Pascal: illegal - must be Boolean
Fortran: Illegal syntax - must be Boolean
LISP: All integers considered true, nil considered false.
bash: Legal, but beware 0 signifies command success and nonzero signifies failure
答案 0 :(得分:2)
还有很多其他语言没有使用这个成语。
例如,在各种Lisp(包括Clojure)中,nil被认为是假值,但所有整数都被认为是真的:
(if nil "True" "False")
=> "False"
(if 0 "True" "False")
=> "True"
答案 1 :(得分:1)
这让我想到了Ruby。
a = 0
b = 5
if a
p "true!"
end
if b
p "true!"
end
两者都打印“真实!”。那就是甜蜜的.zero?
方法:
a.zero?
=> true
b.zero?
=> false
答案 2 :(得分:1)
条件必须是布尔值:C#,Java; Pascal,Modula-2& Pascal的其他后代
条件可以是整数:基本(缺少布尔值)