Scala中的List不是同类集合吗?

Sau*_*ade 3 generics functional-programming scala

我有以下功能,它将列表的头部设置为新值

  def setHead[A](ls: List[A], ele: A):List[A] = {
    ls match {
    case Nil => ls
    case x :: xs => ele :: xs
    }
  }
Run Code Online (Sandbox Code Playgroud)

用它调用后输出

println(setHead(List(-1,-2,-3,4,5,6), (x :Int)  =>  x < 0))
Run Code Online (Sandbox Code Playgroud)

List(<function1>, -2, -3, 4, 5, 6)
Run Code Online (Sandbox Code Playgroud)

但该函数采用类型'A'参数,我传递一个类型为'Int'的列表和一个函数,然后如何编译和运行,因为类型'A'不能同时为Int.

dki*_*kim 5

无论IntInt => Boolean继承Any,这是Scala的类层次结构的根:

  • Int继承自AnyVal,继承自Any.
  • Int => Boolean继承自AnyRef,继承自Any.

我们可以通过几种方式检查Scala REPL中表达式的类型:

scala>  def setHead[A](ls: List[A], ele: A):List[A] = ls match {
     |    case Nil => ls
     |    case x :: xs => ele :: xs
     |  }
setHead: [A](ls: List[A], ele: A)List[A]

scala> setHead(List(-1,-2,-3,4,5,6), (x :Int)  =>  x < 0)
res0: List[Any] = List($$Lambda$1256/1374785073@3290b1a6, -2, -3, 4, 5, 6)

scala> :type setHead(List(-1,-2,-3,4,5,6), (x :Int)  =>  x < 0)
List[Any]
Run Code Online (Sandbox Code Playgroud)