あおきです。

  In Mail "[ruby-list:15377] Re: mail library"
    matz / netlab.co.jp (Yukihiro Matsumoto) wrote:

> まつもと ゆきひろです

> |根本的なココロは「use_lib のほうが require より抽象度が高い」と
> |いうことです。うまいたとえが思いつかないのですが、たとえば

> これは[ruby-list:15298]で書いてあったようなことを意味してる
> んでしょうか? まだピンときてないんですが。

まあ、そういうことです。そういうことも「やろうと思えば」簡単に
(かつ互換性をなくすことなく)できるというのがポイントです。

たとえばライブラリはまとめてディレクトリに入れるということにします。
現在の状態からなにもRubyに機能を追加しないでそれに対応しようとすると、
ライブラリを使うひとがそれぞれに require 'mail/pop' のような記述を
することになるでしょう。

それが広まってきたころになってからなにか変更をしたくなったとします。
たとえばライブラリを階層化したいとか、ファイルの位置が変えられない
のが不便だとか、ファイルの一部だけロードしたいとかそういうことです。
それに対応しようとしたら、requireの文字列の中からライブラリ名を表す
部分をとりださないといけなくなります。それには feature.split('/')][0]を
とればいいかというと、絶対にそうはならない。

たとえばすでにirbのなかに require 'irb/slex' がありますし、ぼくも
 require './tmail' などと書いてしまっています。これにさらにWindowsが
からんで 'c:\cygwin...' はどうなるとか言いだしたらもうなにがなんだか
わからなくなるでしょう。
そういうことも含めて将来の混乱を避けるためには、Rubyインタプリタと
ソースを見る人の両方に「このライブラリのなかのこの機能を使いたいんだ」
と**明示的に**示す方法が必要だと思うわけです。それには引数として
ライブラリ名を与えるようにしておけば十分だろうと判断し、use_lib の
例を挙げました。

ですからあれは実装はどうなっていてもよくて、それよりもuse_libが
一枚(requireとの)あいだにあるということと、それが標準の手段として
与えられるということが重要なわけです。
-------------------------------------------------------------------
あおきみねろう     site: http://www1.u-netsurf.ne.jp/~brew/mine/jp/