2

メソッドの引数の前にアンパサンドを使用して、途中でブロックが見つからない場合にエラーを出力するyieldの使用を避けることを理解しています。

ただし、プロシージャをブロックに戻すために、メソッドを呼び出すときに引数の前に & を使用することがあります。最終的には 2 つのアンパサンドがあり、1 つはブロックを proc に変換するためのもので、もう 1 つはその反対のものです。

どのようだ?!proc からブロックを取得するためにアンパサンドを付ける必要があるのはいつですか? その理由は?

英語を母国語としないと、難しい質問をするのが難しくなる可能性があるため、明確であるといいのですが。

この例は、 http: //courseware.codeschool.com/ruby_bits_2/ruby_bits_2_level_1.pdf にある CodeSchool のスライドから引用しました。

class Timeline
attr_accessor :tweets
  def each(&block)
     tweets.each(&block)
  end
end
4

2 に答える 2

1

併用するのが一般的です。ブロックはパラメーターとして使用できませんが、プロシージャーは使用できるためです。したがって、ブロックをメソッド本体内のパラメーターとして使用する必要がある場合は、それを proc に変換する必要があります。

そのメソッド内で、ブロックのみを受け入れる別のメソッドに proc を渡したい場合があるため、もう一度変換を行う必要があります。

例えば:

def each(&block) # block to proc
  posts.each(&block) # proc to block
end
于 2013-04-12T20:54:31.097 に答える