我正在阅读优秀的Ruby on Rails Tutorial,并遇到了以下代码。
if 0
true
else
false
end
上面的代码返回了true
,并说明了Ruby是如何不同于许多语言(C语言就是一个明显的例子),将0
当作true
来处理的。我并没有将这种行为视为一种特殊的行为,而是假设这种明显背离惯例的行为是有充分理由的。例如,Python将0
当作False
来处理,就像人们所期望的那样。
简而言之,设计Ruby将0
视为true
的基本原理是什么?
我正在阅读优秀的Ruby on Rails Tutorial,并遇到了以下代码。
if 0
true
else
false
end
上面的代码返回了true
,并说明了Ruby是如何不同于许多语言(C语言就是一个明显的例子),将0
当作true
来处理的。我并没有将这种行为视为一种特殊的行为,而是假设这种明显背离惯例的行为是有充分理由的。例如,Python将0
当作False
来处理,就像人们所期望的那样。
简而言之,设计Ruby将0
视为true
的基本原理是什么?
3条答案
按热度按时间gajydyqb1#
我猜Matz希望“真实性”概念简单. -唯一的“假”值是
false
和nil
。只使用
false
可能是最干净的,但是包含nil
的必要性是可以理解的。将整数零作为特例包含进来可能会打开质疑其他类型真实性的思想闸门。那么字符串呢,""
是否为假?数组呢,[]
是否为假?散列呢,{}
是否为假?疯狂的广告(参见JavaScript). a....cnwbcb6i2#
在ruby中,如果存在,则为真,如果不存在,则为假。
因此,Ruby中null(未分配地址)和false仅为false。
所有其他的都是真的,因为它有分配给它的地址。
我这样想;“它存在吗?”
dzjeubhm3#
在Common Lisp中,0也被视为true。例如,下面的代码返回
true
。毫无疑问,Ruby遵循了Lisp中的设计决策,在Lisp中,只有空列表(用
nil
表示)是假的。