今まで恐る恐る使ってたProcオブジェクトを覚えようプロジェクト

Procオブジェクトは、普通こういう感じで使う(と思う)


a = Proc.new{|i| i + 1}
a.call(100) #=> 101 が返る
つまり、callメソッドを使ってブロック片を呼び出すことができる。
ということは!

telephone = Proc.new{|name| p "#{name}\'s phone is ringing!"}
telephone.call("tom")
"tom's phone is ringing!"
とか、遊んでみた。
さて、もうちょっと踏み込んでみるとこういう処理が書ける

def do_something (from)
Proc.new{|to| from += " calls " + to + ","}
end

p do_something("bush").call("koizumi")
bush = do_something("bush")
koizumi = do_something("koizumi")
bush.call("Rumsfeld") #=>bush calls Rumsfeld,
bush.call("rice") #=>bush calls Rumsfeld,rice,
koizumi.call("fukuda") #=>koizumi calls fukuda,
koizumi.call("abe") #=>koizumi calls fukuda,abe,

すごーい。気がする。
よーし、電話かけさせるだけじゃなくて他のことができるようにしてみよう

class AAA
def initialize(&block)
@ac = block
end
def exe(arg)
@ac.call(arg)
end
end

a = AAA.new{|i| "bush loves #{i}"}
b = AAA.new{|him| "koizumi calls #{him}"}
p a.exe("rice") #=> bush loves rice
p b.exe("abe") #=> koizumi calls abe

おー、なんだか汎用的な気分になるね。