gpt4 book ai didi

返回 Unit 的函数的 Scala Option Some/None 习语

转载 作者:行者123 更新时间:2023-12-01 11:36:05 24 4
gpt4 key购买 nike

我有很多函数对来操作资源,例如:

def loadFile(name: String): Option[String]
def writeFile(name: String, data: String): ???

loadFile 目前使用 Option Some/None 返回结果字符串,但是 writeFile 呢?

loadFile 一样,如果 writeFile 失败,我希望它返回一个包含在漂亮的 Try 或 Option 中的响应,而不是抛出异常或返回 null, bool 值,或响应代码。

有哪些推荐的最佳做法?

def writeFile(name: String, data: String): Try(Unit)

def writeFile(name: String, data: String): Option(Unit)

然后测试成功标志?

解决这个问题的最佳 scala-thonic 方法是什么?

最佳答案

此处的其他答案与 Try[Unit] 几乎相同,但需要更多的样板文件。这非常简单(实际上是在函数定义中添加 3 个字母):

def writeFile(name: String, data: String): Try[Unit] = Try {
// do write operation that may throw an exception
}

Try 的巨大优势在于它是一个 monad,因此您可以mapflatMap 它(以及其他)轻松地将多个 Try 操作组合成一个操作。假设您需要一起执行其中的 3 个操作,然后返回 Unit 或第一个 Exception

val result: Try[Unit] = for {
a <- writeFile(name1, data1)
b <- writeFile(name2, data2)
c <- writeFile(name3, data3)
} yield ()

你可以匹配结果:

result match {
case Success(_) => println("Success!")
case Failure(t) => println(s"Failure! {t.getMessage}")
}

您还有一些其他强大的组合器函数,如 API docs 中所示.

并且您还可以编写更通用的方法来重试失败,如this post 中的最后一段代码所示。 .

关于返回 Unit 的函数的 Scala Option Some/None 习语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26938080/

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