为什么在Ruby中将0视为真?

时间:2012-04-30 16:58:13

标签: ruby programming-languages

我正在阅读优秀的Ruby on Rails Tutorial并遇到以下代码。

if 0
  true
else
  false
end

以上内容返回true并说明了与许多语言不同(C是明显的例子),ruby将0视为true。我并没有将这种行为视为特殊情绪,而是认为这有很大理由偏离惯例。例如,Python将0视为False,正如人们所期望的那样。

简而言之,设计ruby以将0视为true的理由是什么?

3 个答案:

答案 0 :(得分:53)

我猜测Matz想要概念性简单的“真实性” - 唯一的“错误”值是falsenil。周期。

仅使用false将是最干净的,但包含nil是可以理解的。要将整数零作为特殊情况包括在内,可能会打开质疑其他类型真实性的心理问题。字符串怎么样,""是假的?和数组,[]是假的吗?哈希,{}是假的吗? Ad insanitum(请参阅JavaScript)......

答案 1 :(得分:10)

在红宝石中,如果存在,那是真的。如果没有,那就错了。

所以,使用Ruby null(没有分配地址)和false只是false。

所有其他人都是真实的,因为它已分配了地址。

我想到了这个方式; “它存在吗?”

答案 2 :(得分:5)

在Common Lisp中,0也被视为true。例如,以下代码返回true

(if 0 'true 'false)

毫无疑问,Ruby正在遵循Lisp中的相同设计决策。在Lisp中,只有一个空列表(由nil表示)是错误的。