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 内で改良を機能させる方法はありますか?