gpt4 book ai didi

ruby - Ruby 中的 OOP 混淆

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:01 25 4
gpt4 key购买 nike

我想做这样的事情。这是一个类:

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 接收一些消息或输出。我知道实例变量在类的实例之外是不可访问的,而且我知道我可以使用全局变量或常量并且可以工作 - 但这不是最佳实践。我不知道为什么这对我来说仍然不清楚。我错过了这个拼图的一小部分。请指教。

最佳答案

假设您有多个 ClassOne 实例。 ClassTwo 怎么知道要使用哪个实例?

您可以通过将 ClassOne 的实例注入(inject) ClassTwo 来解决这个问题。像这样

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 的实例变量。

关于ruby - Ruby 中的 OOP 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23668238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com