2011年05月25日 [長年日記]
■ メタプログラミングRubyの写経 第3章 ブロック
第3章 ブロック
- ブロック基本(使いどころをよくわかっていない)
- メソッドはyeildキーワードでコールバックする
- 本のサンプルはわかりにくかったので以下のサンプルを書いてみた
def hoge puts "yieldは実行されません" puts "このあとにブロックが実行される" yield(1,2) puts "ここからyield後の処理だよ" puts "hogehoge" puts "fugafuga" end hoge do |x,y| sum = x+y puts "#{x}+#{y}=#{sum}" end
- ブロックの有無 Kernel#block_given?
- Kernel にメソッドを追加すれば、すべてのオブジェクトで利用できるようになる
- 以下のコードはなんか心にささったのでメモしておく
module Kernel def using(resource) begin yield ensure resource.dispose end end end
- ブロックがローカル束縛を一緒に連れて行く(クロージャ)
- Ruby1.8以前だとブロックは同名のローカル変数を書き換える
- local_variables 現在のスコープで定義されているローカル変数名
- フラットスコープ class → Class.new(), module → Module.new()
- instance_eval() オブジェクトのコンテキストでブロックを評価する
今日はこれでおしまい。続きは以下から。
- 呼び出し可能オブジェクト
- proc オブジェクト