1

どちらもブロックを除く 2 つのメソッドがありますが、メソッドの 1 つはそのブロックを別のメソッドに渡す必要があります。

def one(&block)
  two(block)
end

def two(&block)
  block.call
end

実際のコードでは、他のパラメーターが渡され、one構文糖衣twoです。

ブロックで と の両方oneを呼び出せるようにしたい。two

one { } # => okay
two { } # => ArgumentError: wrong number of arguments (1 for 0)

を取得する理由がわかり、ArgumentError引数two自体がありません。これをどのように表現するかはよくわかりませんが&block、渡された引数の後にブロックが表示されることを示しているため、エラーが発生します。

ルビー1.9

4

2 に答える 2

2

で同じことができますyield

def one
  two { yield }
end

def two
  yield
end
于 2013-03-28T14:11:27.687 に答える
2

&block次のように、 を 2 番目のメソッドに渡すことができます。

def one(&block)
  two(&block)
end

def two(&block)
  block.call
end

one { puts "Hello World" }
Hello World
#=> nil

アップデート

このようなこともできます

def one
  two(&Proc.new)
end

def two(&block)
  block.call
end

上記と同じ出力になります。ArgumentError: tried to create Proc object without a blockブロックが指定されていない場合は が発生するので、呼び出してブロックが指定されているかどうかを確認する必要があることに注意してください。if block_given?

于 2013-03-28T13:57:20.933 に答える