Fra*_*ank 0 scala intellij-idea
当我在Scala的REPL中键入这个单行时,我看到以下内容,但它在IntelliJ中工作正常.到底是怎么回事?
scala> def sum[T: Numeric](seq: Seq[T]): T = if (seq.size == 1) seq.head else seq.head + sum(seq.tail)
<console>:12: error: type mismatch;
found : Seq[T]
required: Seq[String]
def sum[T: Numeric](seq: Seq[T]): T = if (seq.size == 1) seq.head else seq.head + sum(seq.tail)
^
Run Code Online (Sandbox Code Playgroud)
您必须import Numeric.Implicits._为Scala 执行导入以将其标识+为Numeric添加.通过导入它也可以在控制台中工作:
scala> import Numeric.Implicits._
import Numeric.Implicits._
scala> def sum[T: Numeric](seq: Seq[T]): T = if (seq.size == 1) seq.head else seq.head + sum(seq.tail)
sum: [T](seq: Seq[T])(implicit evidence$1: Numeric[T])T
Run Code Online (Sandbox Code Playgroud)
如果没有导入,Scala会尝试使用+隐式类中定义的方法Predef.any2stringadd.此类已定义Predef,因此它会自动导入到任何Scala代码中.它将任何类型的第一个参数转换为a String,并期望第二个参数为a String.在你的情况下,它不是一个String,因此错误信息.