为类实例变量定义attr_访问器-Ruby

为类实例变量定义attr_访问器-Ruby,ruby,attr-accessor,instance-eval,Ruby,Attr Accessor,Instance Eval,我正在尝试为类实例变量创建访问器。我正在从类中包含的模块调用attr\u accessor方法。请参阅下面的代码: module Persistence def self.included(mod) mod.extend ClassMethods # Add accessor for class instance variable class << mod attr_accessor :persistent_data

我正在尝试为类实例变量创建访问器。我正在从类中包含的模块调用
attr\u accessor
方法。请参阅下面的代码:

module Persistence
  def self.included(mod)
      mod.extend ClassMethods
      # Add accessor for class instance variable
      class << mod
          attr_accessor :persistent_data
      end
  end

  module ClassMethods
      def X
          persistent_data = 'data'
      end
  end
end
我得到
NoMethodError:undefined方法'persistent\u data='


这两种方法不应该是一样的吗?还是我的理解有误?我正在使用REE1.8.7

attr\u accessor
是一种实例方法,它定义了实例方法。因此,它必须在定义实例方法实际上就是定义类方法的上下文中执行。因为类方法实际上是单例方法,所以您必须在单例类中执行它。ActiveSupport提供了
cattr\u访问器
,它定义了类方法和实例方法来访问相同的值。(另请参见its和ActiveSupport。)如果您有ActiveSupport,请使用它;如果不是这样,它的实现可能仍然是有用的灵感。
 mod.instance_eval do
     attr_accessor :persistent_data
 end