在哪些语言中`if(x)`是非零值的合法测试?

时间:2011-07-19 21:45:07

标签: if-statement language-design

我很好奇语言范例是如何普遍允许普通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

3 个答案:

答案 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的其他后代

条件可以是整数:基本(缺少布尔值)