4

DSL に改良を加えたいと思います。この例では、改良を行うことができます。

module ArrayExtras
  refine Array do
    def speak
      puts 'array!'
    end
  end
end

module MyUniverse
  using ArrayExtras
  class Thing
    def initialize
      [1].speak
    end
  end
end
MyUniverse::Thing.new

これにより、「配列!」が出力されます。大丈夫です。しかし、一度導入するinstance_evalと、メソッドが見つかりません。

module MyUniverse
  using ArrayExtras
  class DSL
    def initialize(&block)
      instance_eval(&block)
    end
  end
end

MyUniverse::DSL.new do
  [1].speak
end

undefined method[1]:Array (NoMethodError)` について話します

instance_eval 内で改良を機能させる方法はありますか?

4

3 に答える 3