Class A
def foo
do s.t
end
end
class B
def initialize
@bar = Thread::new{
A::new
}
#Here I want to call A.foo in the thread @bar
end
end
bar = B::new
我想用A类开始一个新线程。如何从B类调用方法foo?
答案 0 :(得分:3)
我觉得你对你的问题感到困惑。首先,你说
我想用A类开始一个新线程
但目前还不清楚你的意思。你不能用'类'开始一个线程。其次,你说
这里我想在线程@bar
中调用A.foo
但是你不在那个新线程中正在执行的块内。即使你是,也没有A类的类方法'foo',所以A.foo
只会产生NoMethodError
。然后你说你想要
从B类调用方法foo?
即使有关调用foo的注释位于B的实例中。
所以,我假设你的意思是:
Class A
def foo
end
end
class B
def initialize
@bar = Thread::new{
a = A::new
}
# Here I want to call a.foo
end
end
bar = B::new
现在,在这种情况下,您的问题是您创建的A
的新实例是线程@bar执行的块的本地实例。它不是您创建的Thread实例的实例变量,您无法访问该实例的任何方法。但是,您可以做的是事先创建该实例并与线程共享:
class B
def initialize
a = A.new
@bar = Thread::new {
do_stuff_with a
}
a.foo
end
这样可以正常工作。当然,你遇到了并发地狱以及通常与使用线程相关的所有问题。当心。