[#30220] schedule for Ruby 1.8.6 — "Akinori MUSHA" <knu@...>

 ruby-core を読んでいない人もいると思うので、ここでもアナウンス

20 messages 2007/01/30

[ruby-dev:30148] Re: net/pop error in Ruby 1.9

From: Minero Aoki <aamine@...>
Date: 2007-01-19 02:49:54 UTC
List: ruby-dev #30148
青木です。

  In mail "[ruby-dev:30126] net/pop error in Ruby 1.9"
  Masaki Suketa <[email protected]> wrote:

> 助田です。
> Net::POP3.start で NoMethodError がでます。

> $ ruby19 x.rb
> /usr/local/lib/ruby/1.9/net/protocol.rb:66:in `closed?': \
> undefined method `closed?' for true:TrueClass (NoMethodError)

たぶん YARV がマージされたときだと思いますが、lib/timeout.rb が
変更されていて、それが net/pop.rb に波及してました。YARV 前だと
lib/timeout のコードは

  def timeout(sec, exception=Error)
    return yield if sec == nil or sec.zero?
    raise ThreadError, "timeout within critical session" if Thread.critical
    begin
      x = Thread.current
      y = Thread.start {
        sleep sec
        x.raise exception, "execution expired" if x.alive?
      }
      yield sec
      #    return true

となってて yield sec が返るんですが、YARV 後はコメントが解除されて
いるので true が返ります。

どっちが正しいんでしょう。

# 1 行目との整合性を考えると、yield の結果が返ってきたほうが
# いいと思うけど、ドキュメントは true を返すと言ってるなあ

--
青木峰郎

In This Thread