Я думаю, вы смущены своей проблемой. Во-первых, вы говорите
Я хочу, чтобы начать новую нить с класса А
, но не ясно, что вы имеете в виду под этим. Вы не можете запустить поток 'с' классом. Во-вторых, вы говорите
Здесь я хочу вызвать A.foo в потоке @bar
но вы не внутри блока, который выполняется в новой нити в этой точке. Даже если бы вы были, не существует метода класса «foo» класса A, поэтому A.foo
приведет только к NoMethodError
. Тогда вы говорите, что хотите
вызов метода foo из класса B?
даже если комментарий о вызове Foo находится в например Б.
Итак, я предполагаю, что вы имеете в виду следующее:
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
Это будет работать нормально. Конечно, вы сталкиваетесь с адвентизмом и всеми проблемами, связанными с использованием потоков. Осторожно.