藤本です。

From: matz / netlab.co.jp (Yukihiro Matsumoto)
Subject: [ruby-list:7913] Re: filename (Re: libwww-ruby)
Date: Fri, 15 May 1998 15:44:11 +0900

> まつもと ゆきひろです
> 
> In message "[ruby-list:7910] Re: filename (Re: libwww-ruby)"
>     on 98/05/15, 藤本尚邦 / FUJIMOTO Hisakuni <hisa / imasy.or.jp> writes:
> 
> |  藤本です、こんにちは。
> 
> |  今のFileクラスをFileIOというような名前にして、それとは別にIOの派生ク
> |ラスではない独立したFileというクラスがある、そんな構成になっているとい
> |いんじゃないかなぁと思うことがあります。
> 
> ふーむ.
> 
> |  一方で「Fileというオブジェクト」をIOと無関係に扱いたい状況も結構あり
> |そうです。例えば、unixのmvコマンドやcpコマンドは「Fileというオブジェク
> |ト」を入出力と無関係に扱うコマンドです。また、Macでは、既存のアプリケー
> |ションのドキュメントファイルを扱うときなどstream IO以外の方法でファイ
> |ルにアクセスすることも多いです。
> 
> 現在のrubyの仕様では入出力を伴わないファイル操作はFileクラス
> のクラスメソッドになってます.入出力でないファイルに対する操
> 作って私の思い付くものはほぼ全て手続き的な操作でクラスにする
> 必然性を思い付かないんですが,そーゆーもんではないのでしょう
> か.

 (以下Fileは僕が考えたもので、FileIOというのが現RubyのFileに相当します。)

  現在のRubyではあるファイルを特定するのに、Stringで表現しているわけで
すが、それに加えてFileクラスのインスタンスとしても表現できるといいんじゃ
ないかなぁと考えました。意味のある例かどうか自分でもわかりませんが...

  例えば unixでは
    f = File.new("/usr/local/bin/ruby")
    f.name           # "ruby"
    f.location.to_s  # "/usr/local/bin/"
    d = f.location   # File.new("/usr/local/bin/")
    f.to_s.split(File.pathSeparator) # [ "usr", "local", "bin", "ruby" ]

  Macでは
    f = File.new("Macintosh HD:98/05/15:ruby")
    f.name           # "ruby"
    f.location.to_s  # "Macintosh HD:98/05/15:"
    d = f.location   # File.new("Macintosh HD:98/05/15:")
    f.to_s.split(File.pathSeparator) # [ "Macintosh HD", "98/05/15" ]

    f.is_directory?  # false
    d.is_directory?  # true
    for l in FileIO.open(f)
      ...
    end

    f.rename("newname")

  で、引数にファイルパスを書くようなところでは、文字列とFileオブジェク
トのどちらでも受け付けるようにします。
  File.newって書くとファイルが新しく出来てしまうように見えるから、
FileSpecifierとかFileLocationみたいなネーミングの方が適切かもしれませ
ん。

  けど、こういうふうなことで考えを巡らす人が少なくとも一人くらいはいる
ということでして、あまり気にしないでください。書いているうちに自分でも
よくわからなくなってきました (^^;。

P.S.
  ほんとうはRubyを誰かがポートしてくれて、自分はアプリ間通信とか
AppleEventとかMac用のモジュール類を作りたいなぁとなどと思ってました。

#けど最近Macの使用頻度が減りつつあるような気がする (^^;

=============================================================
 藤本尚邦  FUJIMOTO Hisakuni                hisa / imasy.or.jp
=============================================================