问题标签 [scala-arm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 面向班级成员的 Scala-ARM?
我对 Scala 很陌生,所以请原谅我的基本问题。
我正在尝试让 Scala-Arm 管理类成员的发布,但在确定范围时遇到了麻烦。
尽管以下代码可以编译,但它失败了
在反映电话。因此,似乎managed_file
正在立即发布。
对于局部变量,我使用了for (managed_file <- managed(...))
语法,但在这里看不到该怎么做。
建议任何人?
scala - 标量臂。返回类型
我正在使用scala-arm库来自动释放/关闭资源(例如InputStream
)。
但问题是下面的代码返回ExtractableManagedResource[Int]
,而不仅仅是Int
我想要的。
是否有任何选项可以返回Int
并克服包装结果ExtractableManagedResource
?
编辑:我知道我可以 declreresult
变量 asvar
并从内部分配给它for-comprehension
,但我想要更多的 scala 惯用方式,即不使用var
scala - ScalaARM 错误 - 值过滤器不是 ManagedResource 的成员
按照 ScalaARM 主页上的示例,我写了这个:
(打开一个lucene IndexReader)
但是我得到这个编译错误:
错误:(34, 45) Play 2 Compiler: Indexer.scala:34: value filter is not a member of resource.ManagedResource[org.apache.lucene.index.DirectoryReader] for ( ir: IndexReader <- managed(DirectoryReader.open (FSDirectory.open(文件)))){
有人可以解释这里发生了什么吗?^
scala - 托管资源在另一个托管资源内时关闭
我正在使用 scala-arm,我有一个类似于这个的代码:
如果托管资源“FileInputStream”或“BufferedSource”失败,那么“ZipOutputStream”也会失败,我只会在控制台中看到“ZIP FAILED”消息。我从来没有看到“缺少文档”日志。
如果一个路径失败,那么我需要继续将所有其他文件添加到 zip 文件中。我怎样才能做到这一点?
scala - Scala 中用于嵌套资源的托管(ARM)
所以,我在 scala 中有这段代码,我将其转换为托管代码。
第一次尝试是:
但是,它看起来不太可读。有没有更好的方法让它变得managed
可读?
scala - 如何从使用托管打开的文件创建字符串序列?
试过这个从文件创建一个序列:
scala - scala-arm:Iterator[Int] 类型的表达式不符合预期的 ManagedResource[B_] 类型
此代码使用"com.jsuereth" %% "scala-arm" % "2.0"
:
编译失败并出现错误:
任何想法?
scala - 如何在 Scala 中编写资源,同时仍然使用 scala-arm 正确关闭它们?
我有一个类,它获取一个本地文件,对其进行转换并将其存储在 GCS 中:
我正在尝试删除一些代码重复,特别是创建fileInputStream
and gcsOutputStream
。但我不能简单地在方法顶部提取这些变量,因为它会在 scala-armmanaged
块之外创建资源:
如您所见,代码更清晰,更可测试,但资源没有被正确处理,因为它们不是“托管”的。例如,如果在创建时抛出异常gcsOutputStream
,fileInputStream
则不会关闭。
我可能可以使用Google Guava sources and sinks来解决这个问题,但我想知道在 Scala 中是否有更好的方法来解决这个问题,而无需引入 Guava。理想情况下使用标准库或 scala-arm 功能,甚至可能在Cats
?
- 我应该将
fileInputStream
and定义gcsOutputStream
为不带任何内容并返回流的函数吗?似乎代码在任何地方都会更加() => InputStream
冗长() => OutputStream
? - 我应该使用多个scala-arm“管理”来理解(一个定义
fileInputStream
andgcsOutputStream
,另一个在每个子函数内)?如果我这样做,“内部”输入流将被关闭两次不是问题吗? - 是否有一种我没有看到的干净和“scalaish”的方法来做到这一点?