这确实很愚蠢,但是我尝试编写第一个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”,但没有帮助。

最佳答案

我不知道为什么,但是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

09-30 15:33
查看更多