如何隐藏标准 Scala 库中定义的特征

How do I shadow traits defined in standard scala library

我是 Scala 和函数式编程的初学者,正在尝试学习基础知识。为此,我开始阅读这本书 Functional Programming In Scala。从一组练习开始,他们定义了一个列表 class(如下所示)

sealed trait List[+A]

case object Nil extends List[Nothing]

case class Cons[+A](x: A, xs: List[A]) extends List[A]

object List {
  def sum(ints: List[Int]) = ints match {
    case Nil => 0
    case Cons(x, xs) => x + sum(xs)
  }

  def product(ds: List[Double]) = ds match {
    case Nil => 1.0
    case Cons(x, xs) => x * product(xs)
  }

  def apply[A](as: A*): List[A] =
    if (as.isEmpty)
      Nil
    else Cons(as.head, apply(as.tail: _*))
}

哪个应该有效。但是当我尝试在 scala 工作表(IntelliJ 插件)中做同样的事情时,我看到错误,方法 sumproduct 不能应用于这样的函数定义(抛出的确切错误是 Type mismatch, required Byte/Char/Int/Double...., found Any ).所以我的问题是如何在我的包中定义的 trait/worksheet 中覆盖 scala 库中定义的数据结构。

在 IntelliJ IDE 中突出显示的错误似乎具有误导性。真正的错误是示例中的递归函数缺少 return 类型:

def sum(ints: List[Int]):Int

def product(ds: List[Double]):Double

按下 Evaluate worksheet 绿色箭头按钮后,IntelliJ 将在“消息”窗格中显示这些错误。