私はあなたの問題について混乱していると思います。まず、あなたは
は、私はクラス
で新しいスレッドを開始したいと言うが、あなたがそれで何を意味するかは不明です。あなたは 'クラス'でスレッドを開始することはできません。第二に、あなたは私が
@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
これはうまく動作します。もちろん、並行性の問題と、スレッドの使用に関連するすべての問題が発生します。注意してください。