使用 Ruby 1.8.7 我试图在这里扩展Thread类是片段
class Foo < Thread
attr_accessor :bar
end
t = Foo.new do
puts "Foo thread begins"
self.bar = "Bar value" # also tried @bar
sleep(2)
puts "Foo thread ends"
end
puts "Value: #{t.bar}"
sleep(10)
puts "Value: #{t.bar}"
输出
>Foo thread begins
>Value:
>Foo thread ends
>Value:
为什么我无法看到:bar
课程的Foo
属性?由于这可能不是以这种方式工作,如何将值从新创建的Thread
传递到main
线程?
谢谢
答案 0 :(得分:2)
self
引用主对象,而不是t
。由于方法bar=
未在主对象上定义,因此会抛出错误,该错误不会发送到主线程。
您可以通过多种方式访问该主题:
1)Foo.new{p Foo.current}
2)Foo.new{|foo| p foo}
3)foo = Foo.new{p foo}
答案 1 :(得分:1)
你不需要扩展线程,你可以尝试下面的。
class Foo
attr_accessor :bar
def run
Thread.new do
puts "Foo thread begins"
self.bar = "Bar value" # also tried @bar
sleep(2)
puts "Foo thread ends"
end
end
end
t = Foo.new
t.run
puts "Value: #{t.bar}"
sleep(10)
puts "Value: #{t.bar}"