value%不是类型参数T(Scala)的成员

时间:2018-04-06 16:26:44

标签: scala

这真的很愚蠢,但我试着编写我的第一个Scala程序并发现:

def remainder[T](a:T, b:T):T = {
    a%b
}

给了我:

scala> :l d.scala
Loading d.scala...
<console>:8: error: value % is not a member of type parameter T
           a%b
            ^

那么,我怎么告诉Scala T是数字并定义数学运算? 我不相信这么简单的事情需要知道Scala的所有黑暗角落。一定很简单! 好吧,我尝试了一些像“T:Numeric”这样的组合,但它没有帮助。

1 个答案:

答案 0 :(得分:6)

我不确定为什么,但Numeric不够严格。

def remainder[T](a:T, b:T)(implicit ev:Integral[T]):T =
  ev.rem(a,b)

......可以加糖...

def remainder[T:Integral](a:T, b:T):T =
  implicitly[Integral[T]].rem(a,b)

...或进一步美化......

import Integral.Implicits._

def remainder[T:Integral](a:T, b:T):T = a % b