如何在细化中使用cattr_accessor [没有rails]

时间:2013-11-03 17:15:55

标签: ruby ruby-2.0 activesupport

我想在课程cattr_accessor中使用active_support/core_ext/class/attribute_accessors中的refinement

  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

1 个答案:

答案 0 :(得分:0)

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

回答失败的原因:

促进core_ext.rb的ActiveSupport cattr_accessor是猴子修补核心对象Class,而ruby doc则提到了有关优化的内容:

  

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

因此,显然cattr_accessible无法从优化中访问。

即使它会这样,cattr_accessible(正是cattr_writercattr_reader)方法正在使用影响全局范围的class_eval,无论如何都会破坏细化的目的。< / p>