2015-02-24 39 views
1

我是一名scala和函数式编程的初学者,并试图学习基础知识。为此我开始阅读Functional Programming In Scala这本书。与一组,他们已经定义了一个List类的练习开始(如下复制)我如何在标准scala库中定义影子特征

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)。所以我的问题是如何覆盖我的包中定义的特征/工作表中scala库中定义的数据结构。

回答

3

在IntelliJ IDE中突出显示的错误看起来具有误导性。真正的错误是在例如递归函数缺少返回类型:

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

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

的IntelliJ将您只要按Evaluate worksheet绿色箭头按钮显示您在这些信息上的错误信息窗格中。

+0

感谢Suma,实际上工作表本身存在一些问题。重新启动IntelliJ并评估工作表时,我指出了与您相同的提示。 – gashu 2015-02-24 09:38:28

相关问题