在 Lift中管理状态的一种典型方法是创建一个扩展 SessionVar 的单例对象,就像这个取自文档的示例一样:
object MySnippetCompanion {
object mySessionVar extends SessionVar[String]("hello")
}
使用SessionVar
s 的情况很清楚,我一直在根据需要在实践中使用它们。我也大致了解它们在内部是如何工作的。
尽管如此,我还是不禁想知道为什么“会话变量”的机制显然与当前会话(通常只是系统中的许多会话中的一个)相关联,是为了通过单例使用而设计的?这与我的直觉大相径庭,以至于乍一看,我很想相信 Lift 能够以某种方式覆盖 Scala 的语言特性,并使其具有与object
常规 Scala 不同的含义。
尽管我现在了解它是如何工作的,但我无法理解这种设计的基本原理,至少对我而言,它违反了最小惊讶规则。有人能指出任何优势或解释为什么会做出这样的设计决定吗?