【发布时间】:2020-04-08 03:53:27
【问题描述】:
我是 Scala 的新手,正在尝试编写一些程序以使其更好。我编写了一个非常类似于 Java 的流程(版本 1),我正在尝试使用高阶函数(版本 2)来编写它。
版本 1:
val entry: Option[Int] = getEntry()
if (entry.isDefined) {
val cachedEntry = entry.get
if (cachedEntry.state.isActive) {
return cachedEntry
} else {
Cache.invalidateCachedEntry(cachedEntry)
}
}
Cache.createNewEntry()
第 2 版:
val entry: Option[Int] = getEntry()
entry.filter(_.state.isActive).orElse((() => {
Cache.invalidateCachedEntry _
Option(Cache.createNewEntry())
})()).get
我不确定这是正确的方法还是有更好的方法?
【问题讨论】:
-
你能把getEntryResponse的结构贴出来吗?其他你的解释是错误的。因为,在上面你定义
entry是可选的Int,但后来你 cal.state.isActive。 -
两者看起来不太一样。如果
entry是None,那么V1 确实不调用Cache.invalidateCachedEntry(),但在V2 中它确实。 -
最后你需要返回什么结果?
-
@Bob 1) 这是一个错字,应该是
cachedEntry.state.isActive。我已经更新了这个问题。 2)我需要返回一个整数值(由createNewEntry()返回,不是可选值) -
@jwvh 你是对的,那是不同的。虽然
invalidateCachedEntry只是从地图中删除了cachedEntry,所以无论哪种方式都应该没问题(应该只是无操作)。
标签: scala functional-programming higher-order-functions