为类实例变量定义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