Ranges上Ruby"==="运算符的含义

JMa*_*ues 10 ruby operators range

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

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

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

有了这些例子:

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

关于红宝石"==="操作符读后在这里,我发现这个工作在范围因为Ruby将这种以case语句.

因此,您可能希望能够将范围放在case语句中,并将其选中.另外,请注意case语句转换为b === a语句,例如b,然后是b结束.

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

(1..10)=== 3.14159»是的

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

Eur*_*eka 11

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

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

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