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

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

if 0 true else false end 

以上返回true并说明了与许多语言不同(C是明显的例子),ruby将0视为true 。 我没有把这种行为视为特质,而是假设有一个很好的理由让这种重大偏离惯例。 例如,Python将0视为False ,正如人们所期望的那样。

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

我猜测Matz想要概念性简单的“真实性” – 唯一的“假”值是falsenil 。 期。

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

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

因此,使用Ruby null(未分配地址)和false仅为false。

所有其他都是真的,因为它有分配给它的地址。

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

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

 (if 0 'true 'false) 

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