【发布时间】:2016-03-22 03:05:20
【问题描述】:
我想对 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
我得到了 [1] 的 undefined methodspeak':Array (NoMethodError)`
有没有办法在 instance_eval 中进行改进?
【问题讨论】:
标签: ruby instance-eval refinements