From: "U.Nakamura" Date: 2001-07-14T13:28:42+09:00 Subject: [ruby-dev:13856] Re: DOSISH file.c changes こんにちは、なかむら(う)です。 At Sat, 14 Jul 2001 07:05:06 +0900, nobu.nakada@nifty.ne.jp wrote in '[ruby-dev:13854] Re: DOSISH file.c changes' > 正しいとは思うのですが、でも単なるrelativeなpathともいえない > のでは。ドライブレターの厄介なところは、シンタックスとして他の > パスの部分と異質なために単純にprefixをつけることはできないとい > うのと、階層的にはパスの上位にあるのに途中のパスを省略できると > いうのがあるのではないかと。 うむ、確かに。 で、この辺を考慮すると、なかださんのパッチのようにしないとま ずいわけですね(やっと理解したらしい)。 週明けくらいに僕のとなかださんのとをマージしたものを作って考 えてみます。 > > 道理でパッチがあたらんわけだ。 > > # 自分の環境がおかしいと思い込んでました > > 変更されてない行の先頭に入っているはずの空白が抜けてるようで > す。 Cheng氏に伝えておきます。 > > で、いずれのパッチでも言えることですが、File.dirname('c:/hoge') > > が'c:/'を返すので(これはわざとですけど)、 > > File.join(File.dirname('c:/hoge'), File.basename('c:/hoge')) > > が'c://hoge'になります。むーんむーん。 > > File.dirname('c:/hoge') # => c: > File.dirname('c:hoge') # => c:. > > のようにするということも考えられますが、これはDOSISHな環境に限 > らず、 > > File.join(*File.split('/hoge')) != '/hoge' > > なので、File.joinの方も余分なセパレータを入れないようにしたほう > がいいかも知れません。とくにWindows上では意味が全く違ってしまう > ので。なんか以前作ったパッチがあったので一応参考までに付けとき > ますが、たぶん今のソースには当たらないかも。DOSISHな環境は考え > てないですし。 うーん、やっぱりこれくらいしなきゃいけなくなるんですね。 ここまでDOSISHな環境以外への副作用を避けてきた(つもり)なんで すが、これはもろに影響出るんですよねぇ。 # DOSISHじゃない方への補足 # UNIX-likeなOSだと/usr/binと指定しても/usr//binと指定しても # 同じようにアクセスできるけど(だからFile.joinは考慮してない # んだと思いますが)、DOSISHなOSだと後者はエラーになる、という # 話です。 それでは。 -- U.Nakamura