我有如下所示類變量和延伸的模塊
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