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

At Sep.02,2001 05:29:05, <JCA02266 / nifty.ne.jp> wrote in
    '[ruby-list:31185] Re: file exist check method?'
> 今まで、ついて行けてなかったクセに割り込みですみませんが^^;

いえ、ぜんぜんそんなことはないですよ。
それに割り込みでもないし。ご意見募集してるわけですから。


> | (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"
> | 
> 
> 以下のような処理を仮定したとき
> 
>   file = "c:/foo/bar.txt"
>   dir = "d:"
> 
>   File.copy(file, dir)
>   p File.join(dir, File.basename file)
>   => "d:bar.txt"
> 
> が、うまく動くかどうかを考えると(a) は、c:foo あるいは 
> c:./foo であって欲しい気持です。曖昧な指定をしてるのが悪いと
> も言えますけど、例えば第一引数にドライブレターだけが渡された
> とき"." を補う((c)の解釈)ということにすればルールは明確にな
> り曖昧さがなくなります。"c:" は、"c:." の意味であるという見
> 方は dirname でもやってるわけですから一貫性もあるように思い
> ます。
> 
> そうすると、(d) の答えも見えます。

うーん、やっぱり「賢いFile.join」という希望があるわけですね。
たぶんあらいさんだけじゃなくてこういう意見の人は多いのではな
いかという予想はしています。

考え方として、大きく分けると
  (1) 現状のFile.join
    => 単にArray#joinで間にFile::SEPARATORをはさんでるだけ。
  (2) Fileに特化したjoinであるFile.join
    => File::SEPARATORをはさむかどうかを判定するようにする。
  (3) 賢いFile.join
    => 引数の配列の中身も操作して、望ましい結果を生成する。
という風に分類できるかと思います。

実のところ、僕にとっては、今回の話の主眼はFile.join以外のと
ころにあるので、File.joinに関しては(2)の範囲でとどめておこう
という腹積もりがあったりします。
だから、(3)を否定するわけではないのですが、それはそれで別途
議論するということでもいいのではないかと思っています。
(2)は(3)を否定する/(3)によって否定される変更というわけでもな
いので、(2)を採用しておいて後から(3)を組み込んでいく、という
段階的パスも採れるわけですし。


> > 念のために書くと、File.joinに関しては非DOSISHにも影響が出ま
> > すので、そっち系の賛否も知りたいところ。
> 
> これはどういう点でしょう?Unix系でも 結合部分の重複するセパ
> レータガ 1 つになるということですか?それはそれで構わないと
> 思います。

そういう話です。


それでは。

--
U.Nakamura <usa / osb.att.ne.jp>