2013-07-15 9 views
5

イテレータが他のイテレータからのすべての値をyieldに許可するメカニズムはありますか? (または「サブタイトル」、私は正しい名前が何であるか分かりません)。 + 'sのyield from別のイテレータからすべての値を返します

def f 
    yield 'a' 
    yield 'b' 
end 

def g 
    # yield everything from f 
    yield 'c' 
    yield 'd' 
end 
+0

'F {| | X yield x} 'が長すぎますか? :) –

+0

@JoachimIsaksson 'f'が複数の値を返す場合は、 –

+0

になりますが、{| * x |利回りx}は大丈夫ですが、idkには微妙なことがあれば私は行方不明です。しかし、私は何も特別なことなしにイテレータ(例外やその他のもの)との通常のやりとりで起こる可能性のあることをすべて処理するものを探していました。 –

答えて

4

これはおそらく、最も慣用的なアプローチです:

def f 
    yield 'a' 
    yield 'b' 
end 

def g(&block) 
    f(&block) 
    yield 'c' 
    yield 'd' 
end 
3

Python3.3と同様に一つの方法はこれです:

def f 
    yield 'a' 
    yield 'b' 
end 

def g 
f &Proc.new # 'duplicate' the block given to g and pass it to f 
yield 'c' 
yield 'd' 
end 
+0

私はそれが可能であるとは考えていませんでした。参考になれますか? 'Proc.new'がブロックの複製であり、空のprocではないのはなぜですか?一見したところでやや秘密に見える。 – tokland

+2

[docs](http://www.ruby-doc.org/core-2.0/Proc.html#method-c-new)でこの動作を指定しています:) – nicooga

+1

私はドキュメントを検索し、それらの行を読んでいて、ドットを接続することができなかったので悲しいです:-(私はそれが私の好みにあまりにも暗黙であることを恐れています。私は唯一の人ではありません。質問には完全に答えます。+1 – tokland

関連する問題