Scala 是不是有跨平台的 AutoCloseable Iterable 解决方案?

Posted

技术标签:

【中文标题】Scala 是不是有跨平台的 AutoCloseable Iterable 解决方案?【英文标题】:Is there a cross platform AutoCloseable Iterable solution for Scala?Scala 是否有跨平台的 AutoCloseable Iterable 解决方案? 【发布时间】:2021-11-08 05:03:34 【问题描述】:

我am porting 一个库banana-rdf 到Scala3。该库旨在为用 Scala、JS(希望在某些时候甚至是原生的)编写的 RDF 库提供一个低成本高效的接口。

我目前正在实现返回 AutoCloseable 迭代器的 Jena 库,这让我想知道如何最好地处理这些。

如果我将该类型转换为 scala Iterable,那么我会丢失其上的可关闭接口,从而丢失调用者应确保在使用前关闭它的信息; 我查看了scala.util.Using,但这需要迭代资源,这是由调用代码确定的,而不是库; 应该只返回 Java 迭代器吗?但我需要检查它是否与 ScalaJS 代码配合得很好 其他想法?

【问题讨论】:

Scala 有自己的Iterators,与 Java 之间的转换应该相当便宜。你能做一个extends Iterator[Something] with AutoClosable 的包装吗?与 Java 不同,AutoCloseable 没有语法优势,所以 Closeable 可能就足够了。 【参考方案1】:

可以使用 Java Iterable 和 Closeable 接口,并以此为基础。

【讨论】:

以上是关于Scala 是不是有跨平台的 AutoCloseable Iterable 解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

Spark平台下,scala比java更有优势么

Mapreduce+Hive+Spark+Scala平台搭建

python枚举是不是有等效的Scala?

Scala 是不是有类似于 Haskell 的 `$` 的运算符?

Scala 项目是不是有任何 OWASP 检查工具?

为啥scala maven工件对每个scala版本都有一个工件,而不是每个scala版本都有一个分类器?