ブロック構文(クロージャ)を使ってみる

かなり簡単に出来る。しかし、良い場面が見つからない。

# 定義: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を渡さなくても使えている辺りがクロージャの真骨頂なのかな?
と、知ったかしてみる。(笑)