在IntelliJ中运行的Scala代码在Scala的REPL中失败

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)

Kol*_*mar 6

您必须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,因此错误信息.