0
我有幾類,其中包含一個數值(該值可以爲界,只能是積極的,ASO ...)定義與返回不同的數值類型的值的方法的特點
我必須做一些基於這些類的「超類型」的基本操作(如求和)。所以我定義的一個特點它以爲它會是微不足道的......
這裏是我的代碼可運行摘錄:
object Main extends App {
trait WithValue[A] {
def value: A
}
class BoundedNumber[A](val lower: A, val upper: A, val value: A) extends WithValue[A]
case class NumberBetween0and99(value: Int) extends BoundedNumber[Int](0, 99, value)
case class UnboundedPositiveInt(value: Int) extends WithValue[Int]
case class UnboundedPositiveDouble(value: Double) extends WithValue[Double]
override def main(args: Array[String]) {
val map: Map[Symbol, WithValue[_]] = Map(
'foo -> UnboundedPositiveDouble(5),
'bar -> UnboundedPositiveInt(10),
'baz -> NumberBetween0and99(55)
)
for (m <- map) println(5 + m._2.value)
}
}
for循環失敗:
overloaded method value + with alternatives: (...) cannot be applied to (Any)
我運行在這個真正微不足道的問題循環幾個小時...猜我在斯卡拉的流暢度遠不是'流利'...
我認爲你需要使用數字類型類型(給一個+函數提供一個隱式數字對象),或者在A中使WithValue協變。 WithValue [+ A],然後在地圖類型註釋中使用基本的數字類型。 – Felix