2011年8月 8日

[ruby-list:48275] Re: require 'dbi' の警告について

> $irb
>>puts Deprecate
> としましたら、
> NameError: uninitialized constant Object::Deprecate
> と表示されるべきと思いますが、
> Deprecate
> => nil
> と表示されます。


私の環境 (rvm でインストールした ruby 1.9.2-p290 / rubygems 1.8.5) では、
irb で
Deprecate
=> Deprecate
となるのですが、nil になるのはよくわからないですね。

> お話のように、すでにDeprecateが定義されているということに思えますが、
> 最初に
> irb
> をした直後にもう定義されているのはこれは同解釈すれば良いのでしょうか?
> 自分が余計な処理をしているのか、
> それとも、そうではないのか、
> の環境で、
> rvm install 1.9.2
> とした場合、みなそうなるのか知りたいです。

私が確認したところ、rubygems ライブラリ (RubyGem を管理するためのライブラリ)
の 1.8.0 以降で Deprecate が定義されるようになっています。
この rubygems ライブラリは Ruby 1.9 以降の ruby に標準添付されていますので、
特に何かしなくても、定数 Deprecate が元々定義されている状態になるはずです。
(rubygems ライブラリのバージョンにもよりますが。)

ただ上で述べたように、rubygems ライブラリ内では Deprecate モジュールとして
定数 Deprecate が定義されているので、稲葉さんの環境のように nil になるのはちょっと謎です。
rubygems ライブラリのバージョンによっては nil で定義されているのか、
それとも rubygems ライブラリとは別の場所で定数 Deprecate が定義されているのか、、

定数がどこで定義されたのか調べる方法って何かありましたっけ。
(メソッドが定義された場所を調べる Method#source_location メソッドみたいなもの)

--
信岡 ゆう (NOBUOKA Yu)


投稿者 xml-rpc : 2011年8月 8日 12:16
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105545
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。