[#30408] Ruby 1.8.6 preview2 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 preview2 をリリースしました。

20 messages 2007/02/24
[#30414] fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Hidetoshi NAGAI <nagai@...> 2007/02/25

永井@知能.九工大です.

[#30418] Re: fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Nobuyoshi Nakada <nobu@...> 2007/02/25

なかだです。

[ruby-dev:30452] Re: fail to autoload at $SAFE==4

From: Hidetoshi NAGAI <nagai@...>
Date: 2007-02-28 15:57:53 UTC
List: ruby-dev #30452
永井@知能.九工大です.

From: "Nobuyoshi Nakada" <[email protected]>
Subject: [ruby-dev:30437] Re: fail to autoload at $SAFE==4
Date: Tue, 27 Feb 2007 15:02:33 +0900
Message-ID: <[email protected]>
> 今気づきましたが、動的にスクリプトを$LOAD_PATHに作るという可能性
> を考えるなら、ロード済みの.soの有無をロード中の.rbの有無よりも優
> 先させてはまずいので、最後のif文はこうですね。
> 
>     if (rb_feature_p(feature, feature + strlen(feature), Qtrue))

すみません.きちんとチェックしていませんでした.
この if 文の形で commit されてしまいましたが,
これだと更にまずいみたいで,
-----------------------------------------------------------------------
ruby -r tk -e 'TkButton.new'
/usr/local/lib/ruby/1.8/tk/label.rb:6: uninitialized constant TkLabel
(NameError)
        from /usr/local/lib/ruby/1.8/tk/button.rb:5:in `require'
        from /usr/local/lib/ruby/1.8/tk/button.rb:5
        from -e:1
-----------------------------------------------------------------------
なんてことになってしまいます.

TkButton に対する autoload で tk/button.rb を load した際に
"require 'tk/label'" が実行され,tk/label.rb の上の
"class TkLabel<TkWindow" で NameError 発生,という流れです.

上記の if 文の部分が "if (rb_feature_p(feature, 0, Qfalse) == 'r')" 
であれば,このようにはなりません.
-- 
                                       永井 秀利 (九工大 知能情報)
                                           [email protected]


In This Thread