回答編集履歴

1

takeもLazyだった

2017/10/12 10:17

投稿

maisumakun
maisumakun

スコア145201

test CHANGED
@@ -12,8 +12,16 @@
12
12
 
13
13
  * `lazy.select{ |n| n.odd? }`→自身の`.next`が呼ばれるたびに、奇数が得られるまで`lazy.next`を呼び出して、その奇数を返す`Enumerator::Lazy`
14
14
 
15
- * `lazy.take(3)`…`lazy.next`を3回呼び出して、その結果を配列にして返す
15
+ * `lazy.take(3)`…`lazy.next`を3回呼び出して、その結果を返す`Enumerator::Lazy`
16
+
17
+ ということで、`take`まで呼んだ時点でも**まだ結果は得られません**。`.to_a`などで結果を取得する必要があります。
16
18
 
17
19
 
18
20
 
21
+ ```ruby
22
+
19
- ということで、`take`から前の`Enumerator`が順々に呼ばれて、最初の`(0..Float::INFINITY).lazy`までが動いています。
23
+ irb(main):001:0> (0..Float::INFINITY).lazy.map{ |n| n.succ }.select{ |n| n.odd? }.take(3)
24
+
25
+ => #<Enumerator::Lazy: #<Enumerator::Lazy: #<Enumerator::Lazy: #<Enumerator::Lazy: 0..Infinity>:map>:select>:take(3)>
26
+
27
+ ```