gpt4 book ai didi

scala - 调用 Scala Option 值的方法(如果存在)

转载 作者:行者123 更新时间:2023-12-04 01:50:19 24 4
gpt4 key购买 nike

我试图找出重构以下代码以消除使用 Option.get() 的最佳方法。我知道使用 get 方法被认为是不好的做法。

if (myConnection.isDefined) {
myConnection.get.close
}

其中 myConnection 的类型为 Option[Connection]

getOrElse 似乎不起作用,因为没有“else”对象可以调用该方法。如果 myConnection 为 None,那么我不想做任何事情。

我想我可以使用 forEach 像:
myConnection.foreach{ c => c.close }

这会起作用,但对我来说看起来很奇怪。就我而言,myConnection 永远不会包含多个连接,而其他人后来查看我的代码可能会认为它可以包含多个连接。

有没有更好的方法既简洁又清晰?

最佳答案

foreach当您使用返回值进行计算时才有意义 unit , 副作用。关闭连接听起来不错foreach对我来说。

这是什么Option.foreach好像:

@inline final def foreach[U](f: A => U) {
if (!isEmpty) f(this.get)
}

但是如果你想做一些计算并返回值, .mapmatch有待改善。
import scala.util.Try

val connectionMaybe = Try {
DriverManager.getConnection(
s"jdbc:h2:~/test;MODE=Oracle",
"sa",
""
)
}.toOption


def getSomething(connectionMaybe: Option[Connection]): Option[Int] = {
connectionMaybe match {
case Some(connection) =>
val statement = connection.createStatement()
val rs = statement.executeQuery(s"select * from something")
Option(rs.getInt("some_column"))
//cleanup if needed
case _ =>
println("no connection found")
None
}
}

关于scala - 调用 Scala Option 值的方法(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53418910/

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