使用Scala ARM库读取简单文件
发布时间:2020-12-16 18:43:22 所属栏目:安全 来源:网络整理
导读:我使用 ARM library将资源文件读入字符串.我正在使用的代码是这样的: def readResource(reosurceName: String): String = { val res = for (writer - managed(new StringWriter); is - managed(this.getClass.getClassLoader.getResourceAsStream(resourceN
我使用
ARM library将资源文件读入字符串.我正在使用的代码是这样的:
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) } 对我来说这看起来有点奇怪,尤其是最后一部分具有identAndGet的身份.有没有更好的办法 ? 一般的问题是,你将如何使用这种风格来做这样的事情 val x: String= for (res1 <- managed(...); res2 <- managed(...); ... resn <- managed) yield { f(res1,res2,...,resn) } 行为是,如果for comprehension中的操作失败,我希望将异常传播出该方法,并且应该关闭资源. 我看到ManagedResource上的map返回一个ExtractableManagedResource,我可以使用opt方法从中提取结果. flatMap仅返回ManagedResource.是否有一个原因 ? 解决方法
我发现map和flatMap应该以略微不同的方式运行,这一点很奇怪.
也许映射操作可以更自由地暴露无法通过flatMap获得的简化结果. 无论如何,你可以按如下方式构造代码,以获得看起来更吸引人的东西 def readResource(resourceName: String): Option[String] = { val managedWriter = { managed(new StringWriter) and managed(this.getClass.getClassLoader.getResourceAsStream(resourceName)) } map { case (writer,is) => IOUtils.copy(is,writer) writer.toString } } managedWriter.opt } 警告:代码未经过测试 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |