我在Scala中有一个不可变对象图(大多数是不可变的 - 继续阅读)。在我的图表深处的某个地方是一个表示缓存的对象。缓存包含ScheduledExecutorService
,它定期调用外部系统并更新缓存的内容。
我的问题是:如果我希望我的缓存真正不可变,那么只要有变化就需要重建自己,但是如果没有更新的变量并且没有我可以返回的“调用者”,它是如何工作的修改过的缓存?
我所看到的像状态monad这样的模式的例子都是由一个线程上的调用者驱动的,所以将修改后的状态对象(缓存)返回给调用者是微不足道的。如果我只想在有人查询时更新缓存内容,这对我来说会很好。但是更新操作很昂贵,而且在后台执行此操作并在完成后交换缓存内容更为可取。
答案 0 :(得分:0)
是否可以将缓存作为隐式上下文传递?像
trait Cache[A] {
def apply(): A
}
trait Immutable {
def foo(implicit resolver: Cache[Int]): Any
}