我正在阅读优秀的Ruby on Rails Tutorial并遇到以下代码。
if 0
true
else
false
end
以上内容返回true
并说明了与许多语言不同(C是明显的例子),ruby将0
视为true
。我并没有将这种行为视为特殊情绪,而是认为这有很大理由偏离惯例。例如,Python将0
视为False
,正如人们所期望的那样。
简而言之,设计ruby以将0
视为true
的理由是什么?
答案 0 :(得分:53)
我猜测Matz想要概念性简单的“真实性” - 唯一的“错误”值是false
和nil
。周期。
仅使用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
表示)是错误的。