gpt4 book ai didi

scala - 将 Option 与 .map() 和 .getOrElse() 结合使用

转载 作者:行者123 更新时间:2023-12-01 13:15:41 25 4
gpt4 key购买 nike

我正在尝试从给定键的 Map[String, String] 中读取值。这个键|值是可选的,因为它可能不存在因此,我想使用 Option 然后使用 map & getOrElse 来写入值(如果它存在),或者将其设置为某个默认值以防它不存在。

val endpoint:String = Option(config.getString("endpoint"))
.map(_.value())
.getOrElse()

上面的代码失败并显示“无法从这个地方访问符号值”

配置是一个 Map[String, Object]

getString 是配置上的一个方法,它接受键并返回值

public String getString(String key){
<...returns value...>
}

我可以只删除 Option() 并执行,但是我必须处理 getString() 将抛出的异常

val endpoint:String = config.getString("endpoint")

知道这有什么问题,或者如何解决这个问题?更好的写法?

更新:我需要指出的是,config 是导入的 Java 库中的一个对象。不确定这是否有所作为。

最佳答案

如果我正确理解您的问题,config.getString 将在 key 不存在时抛出异常。在这种情况下,将调用包装在 Option() 中无助于捕获该异常:您应该改为包装在 Try 中并将其转换为 Option

Try[String] 代表一个计算,它可以成功并成为 Success(String),或者失败并给你一个 Failure(thrownException)。如果您熟悉 Option,这与 SomeNone 的两种可能性非常相似,除了 Failure 将包装异常,以便您知道导致问题的原因。 Try(someComputation) 方法将为您做这样的事情:

try {
Success(someComputation)
} catch {
case ex: Exception => Failure(ex)
}

要考虑的第二件事是当没有值(value)时你真正想要发生的事情。一个明智的想法是提供一个默认配置,这就是 getOrElse 的用途:如果不给它默认值就不能使用!

这是一个例子:

val endpoint = Try(config.getString("endpoint"))
.toOption
.getOrElse("your_default_value")

我们可以做得更好:现在我们正在使用 Try 来捕获异常,如果我们要访问,则无需转换为 Option立即获得值(value)。

val endpoint = Try(config.getString("endpoint")).getOrElse("your_default_value")

关于scala - 将 Option 与 .map() 和 .getOrElse() 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55393156/

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