イテレータが他のイテレータからのすべての値をyield
に許可するメカニズムはありますか? (または「サブタイトル」、私は正しい名前が何であるか分かりません)。 + 'sのyield from別のイテレータからすべての値を返します
def f
yield 'a'
yield 'b'
end
def g
# yield everything from f
yield 'c'
yield 'd'
end
イテレータが他のイテレータからのすべての値をyield
に許可するメカニズムはありますか? (または「サブタイトル」、私は正しい名前が何であるか分かりません)。 + 'sのyield from別のイテレータからすべての値を返します
def f
yield 'a'
yield 'b'
end
def g
# yield everything from f
yield 'c'
yield 'd'
end
これはおそらく、最も慣用的なアプローチです:
def f
yield 'a'
yield 'b'
end
def g(&block)
f(&block)
yield 'c'
yield 'd'
end
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
私はそれが可能であるとは考えていませんでした。参考になれますか? 'Proc.new'がブロックの複製であり、空のprocではないのはなぜですか?一見したところでやや秘密に見える。 – tokland
[docs](http://www.ruby-doc.org/core-2.0/Proc.html#method-c-new)でこの動作を指定しています:) – nicooga
私はドキュメントを検索し、それらの行を読んでいて、ドットを接続することができなかったので悲しいです:-(私はそれが私の好みにあまりにも暗黙であることを恐れています。私は唯一の人ではありません。質問には完全に答えます。+1 – tokland
'F {| | X yield x} 'が長すぎますか? :) –
@JoachimIsaksson 'f'が複数の値を返す場合は、 –
になりますが、{| * x |利回りx}は大丈夫ですが、idkには微妙なことがあれば私は行方不明です。しかし、私は何も特別なことなしにイテレータ(例外やその他のもの)との通常のやりとりで起こる可能性のあることをすべて処理するものを探していました。 –