我正在尝试了解具有类变量的模块包含物。我认为包括具有类变量的模块也将包括类变量到类定义中。
这是按预期工作的:
module A
@@my_name = "rick"
def print_name
puts @@my_name
end
end
class Y
include A
extend A
end
Y.print_name
,但这不是:
module A
def self.included(klass)
klass.include B
klass.extend C
end
module B
@@my_name = "bob"
end
module C
def print_name
puts @@my_name
end
end
end
class Y
include A
end
Y.print_name
我期待" bob ",但我得到了:
a :: c
中的非原始化类变量@@ my_name
如果您使用模块# class_variable_get
:
module C
def print_name
class_variable_get(:@@my_name)
end
end
Y.print_name
#=> "bob"
我认为问题是在module C
中说puts @@my_name
时,它尚不了解@@my_name
,因为在module C
中,您从未设置过它(它设置在module B
中,而C
不知道B
)。
如果您尝试预处模块怎么办?这将一个模块添加到一类,但在班级的方法之前插入它们。这是确保如果存在可变命名冲突的一种方法,则模块将赢得胜利。
,我的意思是更多地作为评论,但是我的用户评级还不够高,因此,如果这不在意,我深表歉意。