gpt4 book ai didi

scala - 一次性资源模式

转载 作者:行者123 更新时间:2023-12-04 12:41:47 26 4
gpt4 key购买 nike

Scala 库中是否有任何标准化的东西来支持 一次性资源模式 ?

我的意思是类似于 C# 和 .NET 支持的内容,仅举一个。

例如,官方 Scala 库是否提供如下内容:

trait Disposable { def dispose() }

class Resource extends Disposable

using (new Resource) { r =>

}

注意:我知道这篇文章« Scala finally block closing/flushing resource » 但它似乎没有集成在标准库中

最佳答案

开始 Scala 2.13 ,标准库提供了专用的资源管理实用程序: Using .

你只需要提供一个关于如何释放资源的隐式定义,使用 Releasable 特征:

import scala.util.Using
import scala.util.Using.Releasable

case class Resource(field: String)

implicit val releasable: Releasable[Resource] = resource => println(s"closing $resource")

Using(Resource("hello world")) { resource => resource.field.toInt }
// closing Resource(hello world)
// res0: scala.util.Try[Int] = Failure(java.lang.NumberFormatException: For input string: "hello world")

请注意,您可以将隐式可释放对象放置在 Resource 的伴随对象中。为了清楚起见。

请注意,您也可以使用 Java 的 AutoCloseable 而不是 Using.Releasable因此任何实现 AutoCloseable 的 Java 或 Scala 对象(例如 scala.io.Sourcejava.io.PrintWriter )可以直接与 Using 一起使用:
import scala.util.Using

case class Resource(field: String) extends AutoCloseable {
def close(): Unit = println(s"closing $this")
}

Using(Resource("hello world")) { resource => resource.field.toInt }
// closing Resource(hello world)
// res0: scala.util.Try[Int] = Failure(java.lang.NumberFormatException: For input string: "hello world")

关于scala - 一次性资源模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15523192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com