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