为什么Numeric对二元进行不同的处理?

时间:2013-08-20 02:10:11

标签: scala

这是怎么回事?

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有关 - >数字+诠释?

2 个答案:

答案 0 :(得分:5)

所以看完http://www.scala-lang.org/api/current/#scala.math.Numeric并看到onefromInt之后,我在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)

是的,IntNumeric的常见类型为Any

使用此:

def myInc[T: Numeric](x: T) = x + implicitly[Numeric[T]].one

您可能会发现fromInt Numeric成员有用。