From: "KISHIMOTO, Makoto" Date: 2014-04-16T23:26:23+09:00 Subject: [ruby-list:49794] Re: lambdaとかprocとか使ったプログラム きしもとです On Fri, 11 Apr 2014 16:19:27 +0900 牛坂 博則 wrote: > みなさんありがとうございました。 > > やはりコードを繰り返し使う時そのコードを保存できるという使い方が一般的み > たいですね。あまりにもややっこしいので何か特別な使い方があるのか と勘 > ぐってしまいました。 > > うまくまとまっていると思われるurlを見つけましたので載せておきます。 > http://d.hatena.ne.jp/shunsuk/20090101/1230816826 > http://www.reactive.io/tips/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/ ややこしい使い方もあるのですが、簡単な例を。 Rubyではブロックは多用されます、よね? # sample1.rb open("foo.txt"){|file| p file.read } (foo.txtは十分短いファイルにしてください) このブロック付きメソッド呼び出しをラップして、最初にファイル名を プリントしてから、何かする、というメソッドを作りたい、と思ったと します。こんな感じになります。 # sample2.rb def my_open filename, &blk #A p filename open filename, &blk #B end my_open("foo.txt"){|file| p file.read } 明示的にlambdaとかprocとしては使っていませんが、 (1) #A の所の &blk でブロックをオブジェクトにして変数に入れて (2) #B の所でそのオブジェクトを、openメソッドにブロックとして渡す といったような、lambdaやprocと同様の「手続きをオブジェクトにする」 という機能を使っています。