我正在使用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
of identity
。有没有更好的办法 ?
一般的问题是,你将如何使用这种风格来做这样的事情
val x: String=
for (res1 <- managed(...);
res2 <- managed(...);
...
resn <- managed) yield {
f(res1, res2, ..., resn)
}
行为是,如果 for 理解中的操作失败,我希望将异常传播到方法之外,并且应该关闭资源。
我看到 a 上的地图ManagedResource
返回 an ,我可以使用该方法ExtractableManagedResource
从中提取结果。只返回一个。是否有一个原因 ?opt
flatMap
ManagedResource