我想做这样的事情。这是一个类:
module MyModule
class ClassOne
def initialize
@chain = []
end
def add_type_one(thing1, thing2)
@chain << thing1 + thing2
end
def add_type_two(thing3, thing4)
@chain << thing3 + thing4
end
def sanitize
@chain.join(" ").gsub("this", "that")
end
end
end
这是另一个类:
module MyModule
class ClassTwo
def initialize
@other_chain = []
end
def add_more(thingA, thingB)
@other_chain << thingA + thingB
end
def add_even_more(thingC, thingD)
@other_chain << thingC + thingD
end
def run
system('program #{@chain} #{@other_chain}')
end
end
end
然后我想像这样称呼这些方法:
a = ClassOne.new
a.add_type_one("I", "Want")
a.add_type_two("These", "Methods")
a.sanitize
b = ClassTwo.new
b.add_more("And", "Variables")
b.add_even_more("To", "Work together")
b.run
要获得
的最终输出必须做些什么system('program I Want These MethodsAndVariablesToWork together')
这个例子的关键在于我无法访问ClassTwo中的ClassOne方法或变量。
b.run
需要从ClassOne获取一些消息或输出。我知道实例变量不能在类的实例之外访问,我知道我可以使用全局变量或常量并且可以工作 - 但这不是最佳实践。我不知道为什么这对我来说仍然不清楚。我错过了这个难题的一小部分。请指教。
答案 0 :(得分:3)
想象一下,您有多个ClassOne实例。 ClassTwo怎么会知道要使用哪个实例?
您可以通过向ClassTwo中注入ClassOne实例来解决此问题。像这样
a = ClassOne.new
a.add_type_one("I", "Want")
a.add_type_two("These", "Methods")
a.sanitize
b = ClassTwo.new(a)
b.add_more("And", "Variables")
b.add_even_more("To", "Work together")
b.run
然后从ClassTwo中访问ClassOne的实例变量。
答案 1 :(得分:2)
以下列方式使用它,以便ClassTwo可以访问ClassOne,
module MyModule
class ClassOne
attr_reader :chain
def initialize
@chain = []
end
def add_type_one(thing1, thing2)
@chain << thing1 + thing2
end
def add_type_two(thing3, thing4)
@chain << thing3 + thing4
end
def sanitize
@chain = @chain.join(" ").gsub("this", "that")
end
end
class ClassTwo
def initialize(obj)
@classOne = obj
@other_chain = []
end
def add_more(thingA, thingB)
@other_chain << thingA + thingB
end
def add_even_more(thingC, thingD)
@other_chain << thingC + thingD
end
def run
system('program #{@classOne.chain} #{@other_chain.join}')
end
end
end