0

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

しかし、含まれているモジュールでインスタンス変数を使用することが正しいかどうかはわかりません。たぶん、別のアーキテクチャを実装する必要があります。

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 に答える