2

这是怎么回事?

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)

斯卡拉 2.10

与 x+1 相关 --> Numeric+Int?

4

2 回答 2

5

因此,在查看http://www.scala-lang.org/api/current/#scala.math.Numeric并看到oneand之后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.

于 2013-08-20T02:22:52.290 回答
4

Int是的, and的常见类型NumericAny

用这个:

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

还有fromInt一些Numeric你可能会觉得有用的成员。

于 2013-08-20T02:21:33.967 回答