如何避免子类或类中的变量名冲突,包括Ruby中的模块?

时间:2013-05-30 05:17:29

标签: ruby

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 ?如何?

1 个答案:

答案 0 :(得分:0)

您的情况将无法包含模块。包含模块意味着您将所包含模块的功能提供给类,即方法和实例变量。

如果您希望类C的程序员不知道M中发生了什么,那么您不应该将M包含到C或子类{{1}中来自C。相反,您应该将某些功能委托给M中的M