我有如下所示类变量和延伸的模块
module MyModule
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def foo
@@var = 1
end
def bar
puts @@var
end
end
end
class A
include MyModule
foo
end
class B < A; end
一个模块使得
B.bar outputs '1'.
然而,我想有如果包含.foo被称为仅的.bar来限定。我试图
module MyModule
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def foo
@@var = 1
extend SingletonMethods
end
module SingletonMethods
def bar
puts @@var
end
end
end
的问题是,
B.bar
返回错误 “在MyModule的:: SingletonMethods未初始化的类变量@@变种”。我怎样才能使.foo中定义的变量可用于.bar?
是否只有mattr_accessor Rails? – 2011-09-27 23:27:36
是的,但实现非常简单 - https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb – Sigurd 2011-09-28 10:53:51
这节省了我很多时间。 – 2016-02-10 18:27:42