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 オブジェクト
[ツッコミを入れる]





