バリケンのRuby日記 RSSフィード

2006-06-20

[] QuickMLソースコードを読む(13) /usr/lib/ruby/1.8/quickml/utils.rbの続き  QuickMLのソースコードを読む(13) /usr/lib/ruby/1.8/quickml/utils.rbの続き - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  QuickMLのソースコードを読む(13) /usr/lib/ruby/1.8/quickml/utils.rbの続き - バリケンのRuby日記  QuickMLのソースコードを読む(13) /usr/lib/ruby/1.8/quickml/utils.rbの続き - バリケンのRuby日記 のブックマークコメント

昨日の日記の続きだよ。

File::safe_openメソッド

class File
  def self.safe_open (filename, mode = "r")
    begin
      f = File.open(filename, mode)
      if block_given?
        yield(f)
        f.close
      else
        return f
      end
    rescue => e
      STDERR.printf "%s: %s\n", $0, e.message
      exit(1)
    end
  end
end

これは、File::safe_openメソッドの定義だね。ファイルオープンして、ブロックを与えられたら「オープンしたファイルブロック引数としてブロックを実行、その後ファイルクローズ」するよ。ブロックが与えられなければオープンしたファイルそのものを返すよ。

「rescue => e」で例外オブジェクト(Exceptionクラスのサブクラス)を捕捉できるよ。捕捉した例外オブジェクトをもとに、Exception#messageメソッドでエラー文字列を得ているよ。あと$0は起動したスクリプトの名前の文字列だったね。この二つを標準エラー出力に出力しているんだね。

今日はここまで。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20060620