2013-04-13 50 views
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) 

我運行在這個真正微不足道的問題循環幾個小時...猜我在斯卡拉的流暢度遠不是'流利'...

+2

我認爲你需要使用數字類型類型(給一個+函數提供一個隱式數字對象),或者在A中使WithValue協變。 WithValue [+ A],然後在地圖類型註釋中使用基本的數字類型。 – Felix

回答

相關問題