Rubyいろいろあるブロック作り方まとめ

Rubyistであれば、Rubyの素晴らしさの一つが、ブロックのパワフルさだというのは共通認識だと思う。

実行結果:

10
11
12
13
14
15

 

全く同じ動きをさせつつ、少し別の記述方法にしてみる。

ブロックを作ってpr変数に代入し、それをeachメソッドにブロックとして渡している。

よく分からないでArray#eachメソッドを使っていた人でも、こう書くと、ブロックとは作って変数に代入できる、ただのオブジェクトだということが理解できると思う。

 

ところでRubyにはブロックを作る手段がいくつもあるのを知っているだろうか。

今回は、ブロックの作り方だけにフォーカスしてまとめてみた。

ちなみに、ブロックの作り方とその中に記述する命令によって、若干挙動が異なる部分があるが、長くなるため今回は省略することにする。(近いうちに書く予定)

今回対象にしたRubyのバージョンは1.9.3。

 

Procクラスのコンストラクタを使う方法。

 

Kernelモジュールで定義されているprocメソッドを使う方法。

Proc.newと同じ。

 

Kernelモジュールで定義されているlambdaメソッドを使う方法。

 

lambdaメソッドの短縮形。(この構文、1.9から使用可能。)

 

Objectクラスのmethodメソッドを使う方法。

 

ちなみに、これらの手段で作ったオブジェクト(例ではpr変数に入っているもの)は、実はブロックとは呼ばない。

これらは、「手続きオブジェクト」と呼ぶ。

http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2flambda_proc.html

 

とはいっても、実際のところ、「手続きオブジェクト」という言葉を使う人、記事を書く人は少なく、ブロックがポピュラーな共通語になっているような気がする。

そんなこともあって、今回の記事タイトルや序盤の説明は、「手続きオブジェクト」のことも「ブロック」として記述した。

序盤を読んで心のなかでツッコミ入れた人はすごい人だと思う。

コメントを残す

トラックバック: http://pgnote.net/wp-trackback.php?p=67