我仍在尝试清楚地了解模块/类/实例变量......
我的代码目前看起来像这样...
module Foo
@@var1 ={}
@@var2 =[]
@@var3 = nil
def m1(value)
@@var2 << value
end
def m2(value)
@@var1[@@var3]=value
end
end
class Bar
include Foo
p @@var1
end
class Bar2
include Foo
p @var1
end
我正在尝试创建一个模块,其中包含每个类的行为方式的类范围配置。配置存储在@@ var1和@@ var2中。使用此代码,变量在包含该模块的所有类之间共享。这不是期望的结果,我希望每个类都拥有它自己的行为配置。
我还尝试创建一个包含模块的单个类,并创建变量,但模块无法访问变量。
module Foo
def m1(value)
@@var2 << value
end
def m2(value)
@@var1[@@var3]=value
end
end
class T
@@var1 ={}
@@var2 =[]
@@var3 = nil
include foo
end
class Bar < T
p @@var1
end
class Bar2 < T
p @var1
end
我还读过,拥有类变量的模块并不是很好的编码风格,但我想不出用这种方式实现我的功能......
提前感谢您提供任何帮助
答案 0 :(得分:0)
首先 - 类变量是邪恶的,应该避免(因为它们也被所有子类继承,并且通常造成的危害大于好处。
您想要在包含给定模块的类或模块上创建类实例变量(而不是类变量)。使用included
方法很容易做到:
module Foo
@default_settings = {}
module ClassMethods
def foo_settings
@foo_settings
end
end
def self.included(target)
target.instance_variable_set('@foo_settings', @default_settings.dup)
target.extend ClassMethods
end
end