gpt4 book ai didi

Scala 最佳实践 : simple Option[] usage

转载 作者:行者123 更新时间:2023-12-02 11:37:12 26 4
gpt4 key购买 nike

作为 Java 到 Scala 的切换者,我经常发现自己重写 null 处理内容,例如

val itemOpt: Option[Item] = items.get(coords) // "items" is something like a Map
if (itemOpt.isDefined) {
val item = itemOpt.get
// do something with item, querying item fields a lot of times, for example
if (item.qty > 10) {
storeInVault(item.name, item.qty, coords)
} else {
storeInRoom(item)
}
}

我猜它看起来很难看,而且它真的看起来像是从Java重写的一段代码:

Item item = items.get(coords);
if (item != null) {
// do something with item, querying item fields a lot of times, for example
}

它在 Java 中看起来也很丑,但至少少了一行。在 Scala 中处理此类简单情况的最佳实践是什么?我已经知道 flatMapflatten 来处理 Option[Stuff] 的集合,并且我知道 getOrElse 来处理默认值。我梦想着这样的事情:

items.get(coords).doIfDefined(item =>
// do stuff with item
)

但我在 Option API 中没有看到类似的内容。

最佳答案

非常流行的使用模式:

val item: Option[Int] = None
val result = item map (_ + 1) getOrElse 0

因此,您只需使用 map 来转换已定义的值。

如果您只想使用存储在 Option 中的值,则只需使用 foreach:

item foreach { it =>
println(it)
}

正如你所看到的,Option还支持很多收集方法,所以你实际上不需要学习新的API。您可以将其视为具有 1 或 0 个元素的集合。

关于Scala 最佳实践 : simple Option[] usage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13941317/

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