2

鉴于以下改进:

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 ......但我仍然无法让它工作。我该怎么做?

4

1 回答 1

2

您需要将您的using StringRefinement语句移到模块之外。

检查文档中的以下段落:

您只能在顶层激活细化,而不是在任何类、模块或方法范围内。

http://ruby-doc.org/core-2.1.1/doc/syntax/refinements_rdoc.html#label-Scope

于 2015-08-28T11:29:05.160 回答