Scala:定义类型的构造函数中可以存在协变吗?
我有类 Variable[X <: SeqVal[_]](initialState:Calc[X])
,我用 new Variable[SeqVal[Float]](Max()) 实例化它 其中 Max
是
case class Max(seq: Int = 0, value: Float = .0f) extends SeqVal[Float] with Calc[SeqVal[Float]]
,除了 Max
之外还有其他 case 类。
即使 Max
确实实现了特征 Calc[SeqVal[_]]
的变体,也无法编译。
[error] ../Variable.scala:14: type mismatch;
[error] found : com.quasiquant.calc.Max
[error] required: com.quasiquant.calc.Calc[com.quasiquant.calc.Price]
[error] Note: com.quasiquant.messages.SeqVal[Float] >: com.quasiquant.calc.Price (and com.quasiquant.calc.Max <: com.quasiquant.calc.Calc[com.quasiquant.messages.SeqVal[Float]]), but trait Calc is invariant in type X.
[error] You may wish to define X as -X instead. (SLS 4.5)
[error] extends Variable[Price](Max(), initChildren)
我需要帮助来尝试弄清楚如何更改 initialState:Calc[X]
的边界,以便可以将 initialState
设置为实现 Calc[ 的任何内容X]
(不仅仅是Max
)。如果我不必向 Variable
的所有实例化添加第二个类型参数,我会更喜欢它
I have the class Variable[X <: SeqVal[_]](initialState:Calc[X])
which I instantiate with new Variable[SeqVal[Float]](Max())
where Max
is
case class Max(seq: Int = 0, value: Float = .0f) extends SeqVal[Float] with Calc[SeqVal[Float]]
, and there are other case classes other than Max
.
This does not compile even though Max
does implement a variant of the trait Calc[SeqVal[_]]
.
[error] ../Variable.scala:14: type mismatch;
[error] found : com.quasiquant.calc.Max
[error] required: com.quasiquant.calc.Calc[com.quasiquant.calc.Price]
[error] Note: com.quasiquant.messages.SeqVal[Float] >: com.quasiquant.calc.Price (and com.quasiquant.calc.Max <: com.quasiquant.calc.Calc[com.quasiquant.messages.SeqVal[Float]]), but trait Calc is invariant in type X.
[error] You may wish to define X as -X instead. (SLS 4.5)
[error] extends Variable[Price](Max(), initChildren)
I need help in trying to work out how I can change the bounding of initialState:Calc[X]
so the initialState
can be set to anything that implements Calc[X]
(not just Max
). I would prefer it if i didn't have to add a second type parameter to all the instantiations of Variable
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是我尝试编译的代码:
编译没有错误。
Here's the code I tried compiling:
Compiles without errors.