3

yieldRubyでは、ブロックをに変換するよりも高速であるとよく言われProcます。

例えば:

def method
  yield
end

より速い

def method &block
  block.call
end

ただし、ブロックを引数として数層深く渡す必要がある場合はどうなりますか?yieldいくつのレイヤーを渡しても、常に高速ですか?それはレイヤーの数に依存しますか、それとも各クロージャーの変数の数に依存しますか?

私が尋ねる理由は、yieldいくつかのレイヤーを深くするには、それをブロックに複数回ラップする必要があるのに対し、に変換すると、Proc1回だけ実行することで時間を節約できるためです。to_procまた、メソッドにパッケージ化する必要のある変数の数に依存するかどうかも知りたいです。

したがって、どちらが高速です。

ネストされた歩留まり?

def method1;method2 {yield};end
def method2;method3 {yield};end
  ...
def methodn;yield;end

または&block

def method1 █method2 █end
def method2 █method3 █end
  ...
def methodn █block.call;end
4

1 に答える 1