38

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

if 0
  true
else
  false
end

上面返回true并说明了与许多语言不同(C 是明显的例子),ruby0true. 我认为这种与惯例的重大背离是有充分理由的,而不是认为这种行为是特殊的。例如,Python 将0视为False,正如人们所期望的那样。

简而言之,设计 ruby​​ 的基本原理是0什么true

4

3 回答 3

63

我猜想 Matz 想要“真实性”的概念简单性——唯一的“错误”值是falseand nil。时期。

使用 justfalse将是最干净的,但包含nil. 将整数零作为特例包括在内可能会打开质疑其他类型真实性的心理闸门。字符串呢,是""假的吗?而数组,是[]假的吗?和哈希,是{}假的吗?疯狂(见 JavaScript)...

于 2012-04-30T17:02:20.867 回答
9

在 ruby​​ 中,如果存在,则为 true。如果不是,那就是假的。

因此,对于 Ruby null(未分配地址)和 false 只是错误的。

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

我是这样想的;“它存在吗?”

于 2012-04-30T17:09:56.890 回答
6

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

(if 0 'true 'false)

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

于 2013-04-19T03:39:50.393 回答