【发布时间】:2017-01-05 01:47:11
【问题描述】:
假设我有一个包含参数化数据类型的数据结构:
case class Terminal[A](value: A, name: String ="")
如果我传递一个具体化的常量,我可以轻松地创建一个Terminal[Double]:
val terminal = Terminal(2.0)
但是,我希望它也能够接收(未实现)input,以便我可以使用不同的上下文多次评估终端。我可以通过按名称调用value 来实现一个简单的解决方案,即
class Terminal[A](value: => A, name: String ="") {
def getValue = this.value
}
var x = 1.0
val terminal = new Terminal(x)
terminal.getValue // 1.0
x = 100.0
terminal.getValue // 100.0
然而,这个程序的用户必须用类似var input_x = None的东西来初始化input,这不是很好,然后改变它的状态,这反过来又不得不让我把value变成@ 987654330@
这是处理这种情况的最佳方法吗?是不是我可以使用任何设计模式或 scala 功能?
我还可以创建一个类Input 来表示这些依赖于上下文的输入,但是我需要更改很多东西。
【问题讨论】:
-
您似乎在尝试将特定解决方案应用于问题时遇到了麻烦。问题是,您正在寻求实施解决方案的帮助,这几乎可以肯定是错误的,但永远不要描述您要解决的实际问题。我建议你退后一步,尝试描述为什么(你认为)你需要这个
Terminal类,以及如何想象在现实生活中使用它。
标签: scala parameter-passing lazy-loading lazy-initialization