Ruby 在包含的模块中使用实例变量
我有Ruby 在包含的模块中使用实例变量,ruby,Ruby,我有ClassA,它包括几个模块 class ClassA include Module1 include Module2 def initialize() @some_var = ... end end 包含的模块具有使用实例变量@some\u var module Module1 def method1 @some_var.a() end end module Module2 def method2 @some_var.
ClassA
,它包括几个模块
class ClassA
include Module1
include Module2
def initialize()
@some_var = ...
end
end
包含的模块具有使用实例变量@some\u 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
但我不知道在包含的模块中使用实例变量是否正确。也许我需要实现另一个架构。使用方法。它们不仅能按预期工作,这也是一种合适的面向对象技术。你不应该侵入另一个物体的内部
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
使用方法。它们不仅能按预期工作,这也是一种合适的面向对象技术。你不应该侵入另一个物体的内部
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
使用方法。它们不仅能按预期工作,这也是一种合适的面向对象技术。你不应该侵入另一个物体的内部
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
使用方法。它们不仅能按预期工作,这也是一种合适的面向对象技术。你不应该侵入另一个物体的内部
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
谢谢对我来说,使用attr_reader是更正确的方法。第二个例子很难看:)我同意你的答案,但是如果你打算使用实例变量,我不认为
instance\u variable\u get
比正常使用实例变量有什么优势。@Max:对。我有一秒钟认为ivars不起作用。我重新检查了一下,它们确实有效。因此,我删除了答案的第二部分。谢谢!对我来说,使用attr_reader是更正确的方法。第二个例子很难看:)我同意你的答案,但是如果你打算使用实例变量,我不认为instance\u variable\u get
比正常使用实例变量有什么优势。@Max:对。我有一秒钟认为ivars不起作用。我重新检查了一下,它们确实有效。因此,我删除了答案的第二部分。谢谢!对我来说,使用attr_reader是更正确的方法。第二个例子很难看:)我同意你的答案,但是如果你打算使用实例变量,我不认为instance\u variable\u get
比正常使用实例变量有什么优势。@Max:对。我有一秒钟认为ivars不起作用。我重新检查了一下,它们确实有效。因此,我删除了答案的第二部分。谢谢!对我来说,使用attr_reader是更正确的方法。第二个例子很难看:)我同意你的答案,但是如果你打算使用实例变量,我不认为instance\u variable\u get
比正常使用实例变量有什么优势。@Max:对。我有一秒钟认为ivars不起作用。我重新检查了一下,它们确实有效。因此,我删除了答案的第二部分。