为什么在Ruby中将0视为真?
我正在阅读优秀的Ruby on Rails教程并遇到以下代码。
if 0 true else false end
以上返回true
并说明了与许多语言不同(C是明显的例子),ruby将0
视为true
。 我没有把这种行为视为特质,而是假设有一个很好的理由让这种重大偏离惯例。 例如,Python将0
视为False
,正如人们所期望的那样。
简而言之,设计ruby以将0
视为true
的理由是什么?
我猜测Matz想要概念性简单的“真实性” – 唯一的“假”值是false
, nil
。 期。
使用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。