ARMライブラリを使用してリソースファイルを文字列に読み込みます。私が使用しているコードは次のとおりです。
def readResource(reosurceName: String): String = {
val res = for (writer <- managed(new StringWriter);
is <- managed(this.getClass.getClassLoader.getResourceAsStream(resourceName))) yield {
IOUtils.copy(is, writer)
writer.toString
}
res.acquireAndGet(identity)
}
それは私には少し奇妙に見えます、特にの最後のacquireAndGet
部分identity
。もっと良い方法はありますか?
一般的な質問は、このスタイルをどのように使用してこのようなことを行うかということです。
val x: String=
for (res1 <- managed(...);
res2 <- managed(...);
...
resn <- managed) yield {
f(res1, res2, ..., resn)
}
動作は、理解のための操作が失敗した場合、例外をメソッドから伝播させ、リソースを閉じる必要があるというものです。
メソッドを使用して結果を抽出できるManagedResource
リターンのマップを見ました。のみを返します。これには理由がありますか?ExtractableManagedResource
opt
flatMap
ManagedResource