0

I have ClassA that includes several modules

class ClassA
  include Module1
  include Module2      

  def initialize()
    @some_var = ...
  end

end

Included modules have methods that use instance variable @some_var

module Module1
  def method1
    @some_var.a()
  end
end

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

The code below works fine and is correct

obj = ClassA.new
obj.method1
obj.method2

But I don't know if it is correct to use an instance variable in included modules. Maybe I need to implement another architecture.

4

1 回答 1

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
于 2013-10-26T08:50:27.703 回答