定义使用算术运算的泛型函数

时间:2016-05-27 22:28:57

标签: scala

您好我正在尝试定义一个使用an的泛型函数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应该是数字类型因此&gt; =是一个有效的运算符。某种类型类或隐式参数会提供解决方案吗?

1 个答案:

答案 0 :(得分:2)

您可以使用Numeric类型类:Something Better than IDs for Identifying Elements in Selenium Tests

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