5

Ruby は、イテレータがyield別のイテレータからのすべての値にアクセスできるようにするメカニズムを提供していますか? (または「サブイテレータ」、適切な名前が何であるかわかりません)。からの Python3.3+ の利回りに似ています

def f
    yield 'a'
    yield 'b'
end

def g
   # yield everything from f
   yield 'c'
   yield 'd'
end
4

2 に答える 2

4

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

def f
  yield 'a'
  yield 'b'
end

def g(&block)
  f(&block)
  yield 'c'
  yield 'd'
end
于 2013-07-15T18:16:01.750 に答える
3

1つの方法はこれです:

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
于 2013-07-15T18:12:34.677 に答える