我想对 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 中进行改进?