From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1998-03-23T19:19:23+09:00 Subject: [ruby-dev:1905] Re: [Bug] autoload problem けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :01902 ] the message: "[ruby-dev:1902] Re: [Bug] autoload problem ", on Mar/23 18:31(JST) Yukihiro Matsumoto writes: >恐らくautoloadの仕様の拡張の提案だと思うのですが,その前に現 >状を確認しておきましょう. はい. >まず,[ruby-dev:1890]で既に述べましたが,現状のautoloadはトッ >プレベルのクラス用になっています.第一引数に指定した文字列 >(またはシンボル)はそのままクラス名として使われます. > >ですから, > >|autoload "::A0::A", "foo.rb" > >という指定は,"::A0::A"という名前の定数が参照されたら foo.rb >というファイルをロードするという意味になります.もちろん,そ >のような定数を定義することは出来ませんから,foo.rbは一生ロー >ドされません. すいませんでした. "::A0::A"だとエラーが出るので, autoload "A0::A", "foo.rb" で試したのでした. ># ここで「定数でない名前を指定した時点でエラーにすべき」とい ># う指摘はもっともです.そのようにせよ,という提案は受け入れ ># られます. それはそれでもっともですね. begin(関連する話題) In [ruby-dev :01903 ] the message: "[ruby-dev:1903] Re: [Bug] autoload problem ", on Mar/23 18:45(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >|# ここで「定数でない名前を指定した時点でエラーにすべき」とい >|# う指摘はもっともです.そのようにせよ,という提案は受け入れ >|# られます. > >と思ってソースを見たら,既にエラーにするようになってました. >いつやったんだっけ…. でも, NameError: Unknown operator `::A::B' ってどういう意味ですか? # "::AA::FF".internでも同じ例外が発生しますね(?_? それに, autoload "A0::A", "foo.rb" は通るのでまだ完全ではないみたいです. end(関連する話題) >|autoload "A", "foo.rb" >|module A0 >| A.new >|end >| >|とすると, >| >|./foo.rb:4: Uninitialized constant A (NameError) >| >|となりますので, 定義されていないシンボルのloadのアルゴリズムに問題があ >|るのでは? > >このプログラム,うちのrubyでは > >./test.rb:4: No such file to load -- foo.rb (LoadError) > >となります.もちろん,foo.rbを用意してやれば動いているように >見えます.これは私の意図している仕様通りです. すいません. foo.rbは module A0 class A end end でした. あくまでも, クラス内クラスを定義したかったのでした. >もし,エラーメッセージが示す通り ./foo.rb という名前にしちゃ >うと無限ループが発生すると思うんですが,これまた私の意図通り >で,このループはしょうがないと思ってます. どういうこと?? >で,考えられる提案は > > (1) 定数名が変なシンボルだったらエラーにしてくれ > (2) (うちでは再現しなかったが)バグがある,直してくれ > (3) クラス内定数もautoloadできるようにしてくれ > >の3つがあります.1は受け入れます.そういう意図でしたら,すぐ >に修正します.2でしたらもうちょっと詳しい情報を下さい. 私は(3)でした... >で,問題の3ですが,これは拒否しようかなあと思ってます.指定 >方法が難しい(クラス内定数を示すシンボルってのは存在しない)の >と実装がややこしくなりそうってのが,主な理由です. 指定の方法は文字列で行なえば良いと思います. autoload "AA::FF",... or autoload "::AA::FF",... 実装が面倒になるのは... でも, autoloadはトップレベルクラス(モジュール)をロードするというのも仕 様としてはそんなにおかしくないと思いますので, 現状のままでも良いですけ ど... __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---