1

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に値を渡すにはどうすればよいですか?Threadmain

ありがとうございました

4

2 に答える 2

2

selfスレッド内の は、 ではなくメイン オブジェクトを参照しますt。メソッドbar=はメイン オブジェクトで定義されていないため、エラーがスローされますが、メイン スレッドには送信されません。

スレッドにアクセスするには、いくつかの方法があります。

1)Foo.new{p Foo.current}

2)Foo.new{|foo| p foo}

3)foo = Foo.new{p foo}

于 2012-09-27T08:31:03.677 に答える