这真的很愚蠢,但我试着编写我的第一个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”这样的组合,但它没有帮助。
答案 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