Ruby中Range对象的"==="操作符的含义是什么?

10
我最近开始学习Ruby,并阅读以下Ruby手册
在该手册中,他们关于范围说了以下内容:
一个多功能范围的最后用途是作为区间测试:检查某个值是否落在范围所表示的区间内。这是使用===,即情况等式运算符来完成的。
有了这些例子:
(1..10) === 5 » true (1..10) === 15 » false (1..10) === 3.14159 » true ('a'..'j') === 'c' » true ('a'..'j') === 'z' » false 阅读了关于Ruby "==="运算符 here 的内容之后,我发现这是因为Ruby将其转换为case语句而在范围上起作用。
您可能希望在case语句中使用范围,并使其被选择。此外,请注意,像case a when b then true end这样的语句将转换为b===a。然而,我有以下问题:为什么以下命令返回true?由于(1..10)表示[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我期望结果是false。
1个回答

12

1..10 表示数学意义下从0到10的一个范围,因此包含 3.14259

它与 [1,2,3,4,5,6,7,8,9,10] 不同。

这个数组是使用 Range#each 方法构造对象数组表示形式的结果,该方法由 Enumerable#to_a 使用,只提供在该范围内的整数值,因为提供所有实数值将意味着遍历无限数量的元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接