我想在课程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
?
答案 0 :(得分:0)
我会将其发布为评论(因为它不提供解决方案),但它需要格式化。
回答失败的原因:
促进core_ext.rb
的ActiveSupport cattr_accessor
是猴子修补核心对象Class
,而ruby doc则提到了有关优化的内容:
...精炼块中的self是这个匿名模块,类似于Module#module_eval。
因此,显然cattr_accessible
无法从优化中访问。
即使它会这样,cattr_accessible
(正是cattr_writer
,cattr_reader
)方法正在使用影响全局范围的class_eval
,无论如何都会破坏细化的目的。< / p>