10

我最近开始学习 Ruby,我正在阅读以下Ruby 手册

在本手册中,他们说以下(关于范围):

通用范围的最终用途是作为区间测试:查看某个值是否落在范围所代表的区间内。这是使用 ===(大小写相等运算符)完成的。

用这些例子:

  • (1..10) === 5 » 真
  • (1..10) === 15 » 假
  • (1..10) === 3.14159 » 真
  • ('a'..'j') === 'c' » 真
  • ('a'..'j') === 'z' » 假

在阅读了此处的 Ruby "===" 运算符后,我发现这适用于范围,因为 Ruby 将其转换为 case 语句。

因此,您可能希望能够将范围放在您的案例陈述中,并选择它。另外,请注意,case 语句在 case a when b then true end 等语句中转换为 b===a。

但是我有以下问题:为什么以下命令返回 true?

(1..10) === 3.14159 » 真

由于 (1..10) 表示 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我预计结果会是错误的。

4

1 回答 1

11

1..10表示Range数学意义上从 0 到 10 的 a,因此包含3.14259

一样[1,2,3,4,5,6,7,8,9,10]

这个数组是方法的结果Range#each,用于Enumerable#to_a构造对象的数组表示,只产生包含在 Range 中的整数值,因为产生所有实数值意味着遍历无限数量的元素。

于 2012-12-05T15:20:15.277 回答