module M
def func1_in_M
@some_popular_name = 'some data needed for M'
end
def func2_in_M
p @some_popular_name
end
end
class C
include M
def initilaize
@some_popular_name = "some data needed for C, but this guy didn't know what are used in M"
end
def func1_in_C
p @some_popular_name
end
end
o = C.new
o.func1_in_M
o.func1_in_C # => "some data needed for M"
这个结果显然不是C级编码器所期望的那个。多模块混合/多子分类也很容易发生这种问题。有什么好建议可以避免这种情况吗? @ var ...仍然可能导致相同的情况。名称压延相关到模块.__ ID ?如何?
答案 0 :(得分:0)
您的情况将无法包含模块。包含模块意味着您将所包含模块的功能提供给类,即方法和实例变量。
如果您希望类C
的程序员不知道M
中发生了什么,那么您不应该将M
包含到C
或子类{{1}中来自C
。相反,您应该将某些功能委托给M
中的M
。