对于问题的措辞感到抱歉,我真的不知道怎么说。我的意思是,我怎么能这样做:
class Test
def doSomething
puts "I'm working"
end
end
class numberTwo
def doSomethingElse
subject.doSomething
puts "Doing other things"
end
end
subject = Test.new
otherObject = numberTwo.new
otherObject.doSomethingElse
我想要的是当调用otherObject.doSomethingElse时,还要调用subject.doSomething。我不确定你怎么做,或者有可能。 提前谢谢。
答案 0 :(得分:1)
如果您希望一个类中的方法知道另一个类的实例(当您调用“new”时创建实例,并将其分配给变量,如subject),则该变量需要
a)是全球性的,正如格伦麦克唐纳建议你使用$ subject表示的那样。 $表示全局变量
b)成为您调用的类的成员,因此不会在类外创建。因此subject将是NumberTwo的成员变量,并在NumberTwo的构造函数中初始化
c)作为参数传入。
在我看来,根据你向我们展示的内容,最简单的方法是将主题作为参数传递。
class NumberTwo
def doSomethingElse(subject)
subject.doSomething
end
end
subject = Test.new
otherObject = numberTwo.new
otherObject.doSomethingElse(subject)
答案 1 :(得分:1)
您需要在调用Test实例上的方法或者只是将其作为类方法并调用它之间做出决定。如果它是前者,那么你需要在某处保持一个引用,这样调用方法就可以看到它。有几种方法可以做到这一点。
除了工厂方法之外,已有一些例子,所以我会做那个......
class NumberTwo
def doSomethingElse
@myTest.doSomething
puts "Doing other things"
end
def testFactory
@myTest = Test.new
end
end
otherObject = NumberTwo.new
subject = otherObject.testFactory
otherObject.doSomethingElse
答案 2 :(得分:0)
我不确定这是不是你的意思,但你可以创建一个类方法:
class Test
def self.doSomething
puts "I'm working"
end
end
这应该让你在不实例化对象的情况下调用该方法。但是,您的subject.doSomething
行应为Test.doSomething
。
很抱歉,如果我误解了你的问题。
答案 3 :(得分:0)
将“主题”更改为“$ subject”,您已全部设定。
答案 4 :(得分:0)
如果你想让一个类调用另一个类的成员,你必须使该类成为第一个类的成员,或者从该类派生。
此处numberTwo
类尝试在没有引用(subject)的对象上调用方法。
答案 5 :(得分:0)
otherObject
对象需要某种方式来了解something
对象。您拥有的方法声明的范围可以防止类在创建方法时了解something
。这是一个可能的解决方案:
class Foo
def doSomething
puts "I'm working"
end
end
class Bar
attr_accessor :foo
def doSomethingElse
foo.doSomething unless foo.nil?
puts "Doing other things"
end
end
foo = Foo.new
bar = Bar.new
bar.foo = foo
bar.doSomethingElse