5

私は scala の初心者で、ストリームを閉じるメカニズムに慣れていません。このようなコードを書きました。

def loadResourceAsString(path: String) = {

  val is = this.getClass().getResourceAsStream(path)

  Source.fromInputStream(is).getLines().mkString("\n")

}

これはscalaソースコードで見つけました。はSource、入力ストリームを閉じるために close メソッドをオーバーライドする BufferedSource を返します。

def fromInputStream(is: InputStream)(implicit codec: Codec): BufferedSource =
  createBufferedSource(is, reset = () => fromInputStream(is)(codec), close = () => is.close())(codec)

例外があった場合、scala は独自のメカニズムで close メソッドを実行しますか?

または、 java のように明示的にfinallyブロックで入力ストリームを閉じる必要がありますか?

4

2 に答える 2

3

要するに - いいえ。 createBufferedSource指定された関数で作成BufferedSourcecloseますが、どちらも呼び出しません for resetnot forclose

于 2013-08-28T03:48:50.207 に答える
0

この投稿が役立つかもしれません: Scala: “using” function .

これは C# の using ステートメントに似ており、非常に便利です。

于 2013-08-28T08:33:12.023 に答える