鉴于以下改进:
module StringRefinement
refine String do
def bar
length
end
end
end
我想使用我的改进实现一个模块来执行块:
module Demo
using StringRefinement
def self.wrap(*args, &block)
instance_eval(&block)
end
end
现在我应该能够像这样使用它:
Demo.wrap { puts "some text".bar }
哪个不起作用: - (
我一直在玩块绑定,yield,context,singleton_class ......但是我仍然无法使用它。我该怎么办?
答案 0 :(得分:2)
您需要将using StringRefinement
声明移出模块之外。
检查文档中的以下段落:
您只能在顶层激活优化,而不能在任何类,模块或方法范围内激活优化。
http://ruby-doc.org/core-2.1.1/doc/syntax/refinements_rdoc.html#label-Scope