我正在通读优秀的Ruby on Rails Tutorial,遇到了以下代码.

if 0
  true
else
  false
end

上面的返回值为true,说明了ruby将0视为true,这与许多语言(C是明显的例子)不同.我并没有将这种行为视为特殊行为而不予理睬,而是认为有一个很好的理由来解释这种与传统的重大背离.例如,Python将0视为False,正如人们所期望的那样.

简而言之,设计ruby将0视为true的基本原理是什么?

推荐答案

我猜Matz希望"真实性"的概念简单化——唯一的"假"值是falsenil.时期

只使用false将是最干净的,但有必要包括nil.把整数零作为特例,可能会打开质疑其他类型真实性的心理闸门.字符串呢,""是假的吗?还有数组,[]是假的吗?散列,{}是假的吗?疯狂广告(见JavaScript)...

Ruby相关问答推荐

当bsearch将数组中的第一个元素与2个值匹配时,它返回nil.为什么?

Ruby 扁平化 JSON 对象或哈希

类似于模块的 attr_accessor 和 attr_reader 的东西?

用函数组合枚举器的Ruby方法

Windows powershell文件类型编码中Ruby IO流的原因是什么

BasicObject 的 singleton_class 的超类如何以及为什么是 Ruby 中的 Class 类?

使用 Ruby,是否可以将 BigDecimal("1") / BigDecimal("3") 打印为 0.3333333333333... 到任意长度?

是否应该在生产时缩小服务器代码?

Ruby 哈希文字的顺序是否得到保证?

Ruby语法

在文件中搜索字符串的最佳方法是什么?

Ruby 中的排序稳定吗?

Ruby字符串上的扫描和匹配有什么区别

我可以使用 `else if` 而不是 `elsif` 吗?

Ruby:更新哈希值的最简单方法是什么?

比较两个数组忽略Ruby中的元素顺序

为什么 __FILE__ 大写而 __dir__ 小写?

Ruby 中的 each 和 collect 方法有什么不同

如何在 Ruby 中对数组进行分块

让 sidekiq 立即执行作业(job)