概要
内容
ブロックを評価する環境としてオブジェクトのinstance_evalを利用します。
主にDSLで利用されます。
サンプル
RSpec風のDSLを作成してみます。
instance_evalをそのまま利用するとかっこ悪いので
エイリアスで偽装してみます。
# encoding: utf-8 class RSpec class << self alias spec instance_eval def describe(value, &block) puts value block.call end def it(value, &block) puts value block.call end end end R = RSpec R.spec do puts "before describe" describe "describe" do puts "before it" it "it" do puts "after it" end end end
出力
before describe describe before it it after it