这是怎么回事?
import Numeric.Implicits._
def myAdd[T: Numeric](x: T, y: T) = x + y // Works
myAdd(1,2)
def myInc[T: Numeric](x: T) = x + 1 // Fails at x: could not find implicit value for parameter num: scala.math.Numeric[Any]
myInc(9)
Scala 2.10
与x + 1有关 - >数字+诠释?
答案 0 :(得分:5)
所以看完http://www.scala-lang.org/api/current/#scala.math.Numeric并看到one
和fromInt
之后,我在REPL中做了一点提问并提出:
scala> def myInc[T: Numeric](x: T) = x + implicitly[Numeric[T]].fromInt(1)
myInc: [T](x: T)(implicit evidence$1: Numeric[T])T
scala> myInc(9)
res1: Int = 10
scala> def myInc[T: Numeric](x: T) = x + implicitly[Numeric[T]].one
myInc: [T](x: T)(implicit evidence$1: Numeric[T])T
scala> myInc(9)
res2: Int = 10
它与一个带有一个参数的方法无关,而是与编译器将T
类型推断为Any
无关。
答案 1 :(得分:4)
是的,Int
和Numeric
的常见类型为Any
。
使用此:
def myInc[T: Numeric](x: T) = x + implicitly[Numeric[T]].one
您可能会发现fromInt
Numeric
成员有用。