こんにちは、なかむら(う)です。

At Aug.28,2001 23:49:27, <nobu.nakada / nifty.ne.jp> wrote in
    '[ruby-list:31140] Re: file exist check method?'
> >   File.join("c:", "foo")	# (a) => "c:/foo"
> >   File.join("c:/", "foo")	# (b) => "c:/foo"
> >   File.join("c:.", "foo")	# (c) => "c:./foo"
> >   File.join("c:", "/foo")	# (d) => "c://foo"
> > 
> > つまり(a)と(d)は見捨ててるわけですが、まぁいいか、と。
> 
>  (a)の方は、ドライブのみ指定された場合をどうみなすか次第でしょ
> う。解釈に曖昧さがある以上、仕方がないと思います。
> 
>  (d)も通したければたぶんこんな感じ。まぁ、ある程度割り切ってし
> まってもいいんじゃないでしょうか。

僕も(a)に関しては「仕方がない」という範疇の話だと思います。
(d)を通すようにするのは簡単ですけど、File.splitなどが"/foo"
のようなディレクトリ構成要素を作成するわけじゃないんだから、
そこまで世話する必要はなかろう、と思います。


というわけで、なかださんと僕の間ではほぼ合意が形成されたよう
に思います。具体的には下記の通り(間違ってたら指摘してくださ
い)。

(1) File.dirnameに関して
  (a) File.dirname("c:/foo")  # => "c:/"
  (b) File.dirname("c:foo")   # => "c:."

(2) File.expand_pathに関して(Dir.chdir("d:/")と仮定)
  (a) File.expand_path("c:foo", "c:/bar") # => "c:/bar/foo"
  (b) File.expand_path("d:foo", "c:/bar") # => "d:/foo"

(3) File.joinに関して
  (a) File.join("c:", "foo")  # => "c:/foo"
  (b) File.join("c:/", "foo") # => "c:/foo"
  (c) File.join("c:.", "foo") # => "c:./foo"
  (d) File.join("c:", "/foo") # => "c://foo"

まだもうちょっと微妙なところがあるかと思いますが、おおよそこ
んなところです。
なお、これらの実装例は例によって
  http://www.ruby-lang.org/~usa/tmp/dosish_driveletter.patch
にあります(現状の1.7へのパッチです)。
# バグがあったら笑って許してください ^^;

上記の各項目に関して、反対意見などがある方ももちろんいらっし
ゃるでしょうから、ぜひともご意見をお聞かせください。
今のところ、目に止まったものは
  http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=DOSISH+%C2%D0%B1%FE
に反映してあるつもりですので、そちらの方もどうぞ。

※注記
これはあくまでruby本体への変更についての議論で、例えばRAAに
あるDOSishモジュールのようなものを否定するわけではありません。
というか、あれはあれで必要と思われるというか。
# ところで、Downloadへのリンクが404なんですけど>もりきゅうさん


それでは。
--
U.Nakamura <usa / osb.att.ne.jp>