0

我想在课堂上使用cattr_accessorfromactive_support/core_ext/class/attribute_accessorsrefinement

  require 'active_support/core_ext/class/attribute_accessors'

  module ExtendedString
    refine String do
      cattr_accessor :separator
    end
  end

但我得到了错误:

 block in <module:ExtendedString>': undefined method `cattr_accessor' for #<refinement:String@Truncator::ExtendedString> (NoMethodError)

我如何cattr_accessor在课堂精炼中使用?

4

1 回答 1

0

我会将其作为评论发布(因为它不提供解决方案),但它需要格式化。

要回答失败的原因:

core_ext.rb促进的 ActiveSupportcattr_accessor是猴子修补核心对象Class,而 ruby​​ 文档则谈到了改进:

... 精炼块中的 self 是类似于 Module#module_eval 的匿名模块。

因此,显然cattr_accessible无法从改进中访问。

即使它会,cattr_accessible(准确地说cattr_writercattr_reader)使用的方法class_eval无论如何都会影响全局范围,这违背了改进的目的。

于 2013-11-03T20:28:51.927 回答