我有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
但我不知道在包含的模块中使用实例变量是否正确。也许我需要实现另一种架构。
答案 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