作为一个 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 中处理这种简单案例的最佳实践是什么?我已经知道flatMap
并flatten
处理 的集合Option[Stuff]
,并且我知道getOrElse
处理默认值。我梦想着这样的事情:
items.get(coords).doIfDefined(item =>
// do stuff with item
)
但我在Option
API 中看不到类似的东西。