ブロック構文(クロージャ)を使ってみる
かなり簡単に出来る。しかし、良い場面が見つからない。
# 定義:do end でもよし closure = Proc.new {|e| p e } # 呼び出し closure.call "Hello."
基本的に、戻り値は返せないようである。
とりあえず、同じソース内で、コピペが連なっているような場面では使えそうな感じがする。
- 応用例(おとといの使いまわし)
ver = "0.9" # RSS Version : 0.9 / 1.0 / 2.0 rss = RSS::Maker.make(ver) do |maker| maker.encoding = "EUC-JP" # encode : default(UTF-8) maker.channel.language = "ja" # for RSS 0.9 maker.channel.about = "http://example.com/index.rdf" maker.channel.title = "Example" maker.channel.description = "Example Site" maker.channel.link = "http://example.com/" add_item = Proc.new {|no| item = maker.items.new_item item.link = "http://example.com/article#{no}.html" item.title = "Sample Article#{no}" item.date = Time.parse("2006/12/15 23:0#{no}") } add_item.call 1 add_item.call 2 add_item.call 3 end
いまいちつまらん例かも。
makerを渡さなくても使えている辺りがクロージャの真骨頂なのかな?
と、知ったかしてみる。(笑)