[ruby-list:433] Re: request(Dir/File)

From: matz@... (Yukihiro Matsumoto)
Date: 1996-08-26 02:16:17 UTC
List: ruby-list #433
まつもと ゆきひろです.

In message "[ruby-list:430] request(Dir/File)"
    on 96/08/24, Keiju ISHITSUKA <keiju@shljapan.co.jp> writes:
|
|けいじゅ@SHLジャパンです. 
|
|久しぶりにリクエストです. 今回はイテレータ編です.

はいはい,歓迎しますよ.

|[1] 

|これをクラスの特異メソッドで追加し
|てもらえませんか?
|
|Dir.foreach("/etc") {|f|
|  ...
|}

むかし,こういうのがあると良いなあと思ってそのままになってい
ました.採用しましょう.

|[2]

|File.foreach("/etc/passwd") {|line|
|  ...
|}
|
|というのもあると嬉しいです.

これも同様に採用しましょう.

|[3] 

|これを, イテレータを利用して
|
|Dir.chdir("/etc") {
|  ...
|}
|
|というかんじで一時的にcdできる機能があると嬉しいです.

これは不採用です.理由は「cwdの情報をブロック内に局所化でき
ないから」です.より詳しくいうとこの構文ではブロックとそこか
ら呼び出される場所でだけカレントディレクトリが変わるような印
象を与えます.一般的には確かにその通りですが,multi-thread言
語であるrubyではこのブロックとの関連の無い他のthreadのカレン
トディレクトリも変更する事になりますので,採用するのに抵抗が
あります.single threadで使う事のはっきり分かっているプログ
ラムならば意味があると思いますけど.

ちなみにこういうのを自分で定義してはどうでしょう?

  def tmp_chdir(dir)
    begin
      cwd = Dir.pwd
      Dir.chdir(dir)
      yield
    ensure
      Dir.chdir(cwd)
    end
  end

single threadであればなんの問題もなく使えると思います.

                                まつもと ゆきひろ /:|)

In This Thread

Prev Next