あおきです。

  In mail "[ruby-ext:01586] Re: require 'dir/...'?"
    TAKAHASHI Masayoshi <maki / inac.co.jp> wrote:

> 高橋征義です。

> # あ、さっき書いてませんでしたが、FooがFoo::Barなどを使ってる
> # 場合には、 foo.rb の中で、
> #
> # require 'foo/bar'
> # require 'foo/baz'
> #
> # などと書く、というのが前提です(_o_)

うーん、その前提がぼくと違うところですね。


> まず、Foo::Bar というクラスがあった場合、このクラスは、ライブラリ
> 製作者の意図としては、
> 
>  1. Fooと一緒に使われることを想定しているが、諸処の事情により
>     サブクラス/モジュールに分割されたもの
>  2. 名前空間を分割する意味でFooというモジュールを使っているが、
>     基本的に他のFoo::* とは別クラス/モジュールとして提供される
>     もの
> 
> の二通りがあるかと思います。

ぼくが想定してるのはタイプはそのどちらとも違って

   3. Foo::Bar、Foo::Baz … で、全てそろって始めて役に立つ

というライブラリです。Foo はただの入れ物で意味がありませんから、
require 'foo' ってのは意味をなしません。同時に require 'foo/bar' も
require 'foo/baz' も意味をなしません。なぜなら全部ないと意味がない
ので、むしろそういう個別ロードはさせるべきではない。というわけで
foo/* をロードしたいわけです。

たとえば実例としては TMail

tmail.rb      TMail::Mail
field.rb      TMail::HeaderField およびそのサブクラス
encode.rb     TMail::HFEncoder, TMail::HFDecoder
loader.rb     TMail::Loader とそのサブクラス
port.rb       TMail::Port とそのサブクラス
parsemail.rb  TMail::Parser
scanmail.rb   TMail::Scanner

これらはすべてそろわないと役に立たず、別々には普通使いません。
かつ、TMail はただの module でそれ自体意味がありません。つまり
ほとんどのファイルが並列なんです。
-------------------------------------------------------------------
まだねばるやつ
青木峰郎