There's an echo in my head

日々のメモ。

Object#instance_execでブロック引数を省略する

def configure(&block)
  @config ||= Configuration.new
  block.call(@config)
end

configure do |config|
  config.use :yaml 
end

みたいなのが、Object#instance_execを使うとスッキリ書ける。

def configure(&block)
  @config ||= Configuration.new
  @config.instance_exec(&block)
end

configure do
  use :yaml 
end

ブロックの中のレシーバがinstance_execのレシーバになる。

参考

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。