era*_*nga 3 functional-programming scala function-composition higher-order-functions
我有一个缓存,并且有两个函数可以从缓存中获取项目并将项目放入缓存中。
当获取项目(从缓存)时,如果键不存在,我需要向其填充一个值并返回该值。
以下是示例代码
class CacheComp {
cache = Map[String, Foo]
get(id): Foo = {
// case(id exists) => Return matching Foo
// case(id not exists) => Create a Foo and update the cache with created Foo. Then return updated Foo
}
put(id, Foo) = {
// put element to the cache
}
}
Run Code Online (Sandbox Code Playgroud)
在这里我违反了get(id)功能的单一责任原则(SRP)。如何在不违反 SRP 的情况下做到这一点?我可以简单地将函数重命名为getOrUpdate(id). 但是有没有任何干净的函数式编程方法可以做到这一点?
已经getOrElseUpdate定义了一个函数mutable map。
val cache = scala.collection.mutable.Map[String, String]()
cache.getOrElseUpdate("lang", "scala")
Run Code Online (Sandbox Code Playgroud)