2

呼び出し元の呼び出し元のブロックに譲りたい場合、どのように進めるべきですか? 私は次のことを思いつきました:

def method1(param)
  method2(param) { |x| yield x if block_given? }
end

def method2(param)
  yield(param) if block_given?   # Can I yield from here
end

method1("String") { |x| puts x } # to here in a more elegant way?
4

2 に答える 2

2

ブロックを明示的に渡すだけ

def method1(param, &block)
  method2(param, &block)
end

def method2(param)
  yield param if block_given?
end

method1("String") { |x| puts x } # >> String
于 2013-01-10T14:30:21.300 に答える
2

1 つの方法は、最初の方法で yield を使用しないことです。

def method1(param, &block)
  method2(param, &block)
end

def method2 param
  yield param if block_given?
end

単項アンパサンドは、メソッドのパラメーター リスト内の「ブロック スロット」を表します。&ブロックを渡す場合、最後のパラメータ名の前に右を付けることで、渡されたブロックにアクセスできます。同じ方法で他のメソッドに渡すことができます。

ここで多くの詳細を見ることができます&: http://ablogaboutcode.com/2012/01/04/the-ampersand-operator-in-ruby/

于 2013-01-10T14:31:45.917 に答える