yield
Rubyでは、ブロックをに変換するよりも高速であるとよく言われProc
ます。
例えば:
def method
yield
end
より速い
def method &block
block.call
end
ただし、ブロックを引数として数層深く渡す必要がある場合はどうなりますか?yield
いくつのレイヤーを渡しても、常に高速ですか?それはレイヤーの数に依存しますか、それとも各クロージャーの変数の数に依存しますか?
私が尋ねる理由は、yield
いくつかのレイヤーを深くするには、それをブロックに複数回ラップする必要があるのに対し、に変換すると、Proc
1回だけ実行することで時間を節約できるためです。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