2016-05-27 34 views
0

嗨定義泛型函數我試圖定義一個通用的功能isNonNeg,使得使用 算術運算符如下:使用運算

scala> def isNonNeg[A](a:A): Boolean = { if (a >= 0.0) true else false} 

然而,這產生以下錯誤:

<console>:13: error: value >= is not a member of type parameter A 
    def isNonNeg[A](a:A): Boolean = { if (a >= 0.0) true else false} 
             ^

我假設問題是因爲類型A是未知的。是否有指定A應該是數字類型的方法,因此> =是有效的運算符。某種類型的類或隱式參數會提供解決方案嗎?

回答

2

可以使用Numeric類型類:http://www.scala-lang.org/api/2.11.8/#scala.math.Numeric

def isNonNeg [A](a: A)(implicit ev: Numeric[A]) = ev.gteq(a, ev.zero) 

如果你想使用運營商,你可以導入Ordering.Implicits:

import Ordering.Implicits._ 
def isNonNeg [A](a: A)(implicit ev: Numeric[A]) = a >= ev.zero 
+0

這個工作,非常感謝。 – femibyte