ruby中的模块和类变量范围

我仍然试图清楚地理解模块/类/实例变量……

我的代码目前看起来像这样……

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 

我还读到,拥有类变量的模块不是很好的编码风格,但我想不出用这个方法实现我的function……

在此先感谢您的帮助

首先 – 类变量是邪恶的,应该避免(因为它们也被所有子类inheritance,并且通常造成更多的伤害而不是好处。

您希望在包含给定模块的类或模块上创建类实例变量(而不是类变量)。 使用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