在Scala中调用通用函数时出错

时间:2017-09-29 19:01:36

标签: scala functional-programming syntax-error

所以我跟随fpinscala并且我有这个对象:

sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]

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

    def product(ds: List[Double]): Double = ds match {
        case Nil => 1
        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: _*))

    def tail[A](as: List[A]): List[A] = as match {
        case Nil => as
        case Cons(_, xs) => xs 
    }

    def setHead[A](as: List[A], a: A): List[A] = as match {
        case Nil => Cons(a, Nil)
        case Cons(_, xs) => Cons(a, xs)
    }

    def main(args: Array[String]): Unit = 
        println(tail(List(1,2,3)))
}

当我尝试运行main时,我得到:

 error: type mismatch;
 found   : List[Int] (in scala.collection.immutable)
 required: List[?]   (in <empty>)
        println(tail(List[Int](1,2,3)))

我完全按照这本书,所以我不知道我在这里失踪了什么。它说你现在应该可以调用List(1,2,3,4)或List(&#34; hello&#34;,&#34; goodbye&#34;),没有任何问题。但是我无法将其传递给函数?我很欣赏有关我失踪的一些见解。

1 个答案:

答案 0 :(得分:3)

代码编译正确,我看到的唯一问题是你在List伴侣对象中声明main方法并且这是不正确的,你应该将它移动到其他对象:

npm install ion2-calendar moment --save