[#9445] thread.rb — m_seki@...

18 messages 2000/03/16
[#9446] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/17

[#9460] Re: thread.rb — m_seki@... 2000/03/21

[#9462] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/21

まつもと ゆきひろです

[#11281] Re: thread.rb — Masatoshi SEKI <m_seki@...> 2000/10/22

[#9498] timeout しない timeout — ARIMA Yasuhiro <fit0298@...>

有馬です。

20 messages 2000/03/26
[#9506] Re: timeout しない timeout — matz@... (Yukihiro Matsumoto) 2000/03/27

まつもと ゆきひろです

[#9509] Re: timeout しない timeout — gotoken@... (GOTO Kentaro) 2000/03/27

In message "[ruby-dev:9506] Re: timeout しない timeout"

[ruby-dev:9391] Re: monitor.rb

From: Tomoyuki Kosimizu <greentea@...2.so-net.ne.jp>
Date: 2000-03-07 08:51:04 UTC
List: ruby-dev #9391
越水です。

From: matz@netlab.co.jp (Yukihiro Matsumoto)
Subject: [ruby-dev:9387] Re: monitor.rb
Date: Tue, 7 Mar 2000 10:11:37 +0900

> 前田さんからも指摘がありました通り、一般的にはそれではまずい
> です。newを再定義したらnewの引数に合わせてinitializeも再定義
> してくださいませ。

newを再定義するような高度なマネはやっていないのですが、monitor.rb中の
superをsuper()に変えないとエラーになってしまいます。次のようなコードで
す:

require 'monitor'

class MyObject
  include MonitorMixin

  def initialize(val)
    @value = val
  end

  def to_s
    synchronize {
      @value.to_s
    }
  end
end

p MyObject.new(1).to_s

これを実行すると、次のようなエラーが出ます:

$ ruby --version
ruby 1.5.2 (2000-03-06) [i686-linux]
$ ruby foo.rb
/usr/local/lib/ruby/1.5/monitor.rb:174:in `mon_enter': undefined method `+' for nil (NameError)
	from /usr/local/lib/ruby/1.5/monitor.rb:198:in `mon_synchronize'
	from foo.rb:12:in `to_s'
	from foo.rb:17

それでfoo#initializeを次のように変更して:

  def initialize(val)
    super
    @value = val
  end

なおかつ、monitor.rbの`super'を`super()'に変えると動きました。

In This Thread