4

これができるかどうか、そして構文はどうなるか興味があります。私は次の場所にいます:

def say_it
  puts "before"
  yield("something here")
  puts "after"
end

say_it do |val|
  puts "here is " + val
  yield("other things") # ???
end 

おそらくノーだと思いますが、ブロックがProcに変換された場合はどうでしょうか。

事前にt​​hx

4

1 に答える 1

5

ブロックを取得するメソッドyieldからのみ意味があります。

そして、はい、彼らは巣を作ることができます。ご了承ください:

  1. トラバーサルはまだスタックに沿って発生します。と
  2. ブロック(およびyield)は、メソッドに厳密に関連付けられています。

例:

def double(x)
    yield x * 2
end

def square_after_double(x)
    double(x) do |r|
       # Yields to the block given to the current method.
       # The location of the yield inside another block
       # does not change a thing.
       yield r * r
    end
end

square_after_double(3) do |r|
  puts "doubled and squared: " + r.to_s
end
于 2012-12-27T23:28:27.027 に答える