Rubyの謎、Blockに迫ってみた
Block とは
Blockの定義は以下になります。
- 複数のコードで構成される
- Blockに名称をつけることができる
- 複数のコードは中括弧({})で囲まれる
- Blockは同じ名前の関数から呼び出すことができる
- 関数からは
yield
で呼び出すことができる
実際に動かしてみた
def walk p "前に移動した" yield p "左に移動した" yield end walk { p "行き止まり!" }
実行結果
ruby Ruby/methods.rb "前に移動した" "行き止まり!" "左に移動した" "行き止まり!"
なぜこんなものがあるのか
単一責任のメソッドを実行する場合に用いるもののようです。
JavaScriptでいうと以下のような時でしょうか
$( "#id" ).click(function() { alert( ``called!`` ); });
idがクリックされた時に、アラートをだすという振る舞いを持っています。
def click yield end click { p "called!" }
書き換えるとこんな感じでしょうか。
うーむ、あまり使うケースが想定できませんね。
ブロックを使うことによってメモリなどに変化があるのか調べてみたいと思います。