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