Project1

标题: each的使用有个疑问 [打印本页]

作者: adahs    时间: 2020-5-30 10:15
标题: each的使用有个疑问
  1. a = 1..10
  2. p a.include?(9.9)
  3. a.each {|i| p i}
复制代码
这段代码的运行结果说明9.9是在1..10里面的,但是each p出来只有整数了(试了一下for也是一样的),是each会对对象做什么处理吗?这个是只针对范围对象的特殊处理?

作者: guoxiaomi    时间: 2020-6-5 22:33
Range类的each方法里提到(Ruby2.7.1版本):
The each method can only be used if the begin object of the range supports the succ method. A TypeError is raised if the object does not have succ method defined (like Float).

也就是说当你的Range第一项是整数的时候,调用each就会从这个整数开始数起,不断+1,直到超出范围。

作者: SixRC    时间: 2020-6-6 01:11
其实我觉得是有点bug的感觉..
我看了1.8.3的源码
include? 的描述是  对象是否是range的元素之一
但是具体的实现是 对象是否大于下限小于上限 (毕竟一项一项列出来效率太差了)
我感觉可以加个判断 不是同一个类就pass 就没bug了
现在这样 其实就当feature吧  完全不可比较的两个类还是会返回false的反正

而each就是不断succ 所以一定是同一类的

我感觉源码里这段介绍写的超好  
我头一次发现Range还能这样写
附上
Range





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1