在包含的模块中使用实例变量

时间:2013-10-26 08:47:42

标签: ruby

我有ClassA包含几个模块

class ClassA
  include Module1
  include Module2      

  def initialize()
    @some_var = ...
  end

end

包含的模块具有使用实例变量@some_var

的方法
module Module1
  def method1
    @some_var.a()
  end
end

module Module2
  def method2
    @some_var.b()
  end
end

以下代码运行正常

obj = ClassA.new
obj.method1
obj.method2

但我不知道在包含的模块中使用实例变量是否正确。也许我需要实现另一种架构。

1 个答案:

答案 0 :(得分:3)

使用方法。它们不仅按预期工作,这也是一种适当的OO技术。你不应该闯入另一个物体的内部。

require 'ostruct' # for OpenStruct

module Module1
  def method1
    some_var.a
  end
end

class ClassA
  include Module1

  def initialize()
    @some_var = OpenStruct.new(a: 1, b: 2) # construct some object with some methods
  end

  attr_reader :some_var
end

obj = ClassA.new
obj.method1 # => 1