2008-07-21

RhinoでcloseStream関数に相当するものが欲しかった

// 入出力例外をスローしないclose()
function doClose(stream) {
    if (stream) {
        try {
            stream.close();
        } catch(e) {
            // 入出力例外をダンプ?
            java.lang.System.err.println(e);
        }
    }
}
JavaScriptはJavaよりも幅広くcatchするということを忘れていた。
function doClose(stream) {
    // 使い方次第ではCloseableかどうか調べた方が確実かも
    if (stream) {
        try {
            stream.close();
        } catch(e if e.javaException instanceof java.io.IOException) {
            // 入出力例外だけcatchして出力する
            var err = java.lang.System.err;
            err.println(e.message);
            err.println(e.stack);
        }
    }
}
今使っている書き捨てスクリプトで問題なく動いている。
(2012-09-19: 条件付きcatchを使うように変更した。変更前は、スローされたオブジェクトを全てcatchして目的外のオブジェクトなら再スローするように記述していたが、これは冗長だった)

0 件のコメント:

コメントを投稿