2016-01-10 38 views
1

我是新来的斯卡拉和通过这本书的工作(Function Programming in Scala)。其中一项练习涉及复制Option特征及其功能。不过,我在REPL中编译我的解决方案时遇到问题。特征体内的Scala类型匹配函数

sealed trait Nullable[+A] { 

    def get[B >: A](default: => B) : B = this match { 
     case Value(v) => v 
     case Null => default 
    } 
} 
case class Value[+A](value: A) extends Nullable[A] 
case object Null extends Nullable[Nothing] 

REPL错误细节:基于这些错误

error: constructor cannot be instantiated to expected type; 
found : Value[A(in class Value)] 
required: Nullable[A(in trait Nullable)] 
      case Value(v) => v 

error: pattern type is incompatible with expected type; 
found : Null.type 
required: Nullable[A] 
      case Null => default 

我有一个唠叨的感觉,该编译器不能推断this的(即图案匹配)的类型为Nullable

我试过这个在线Scala utility代码块,它似乎编译和运行。我可以看到的唯一区别是,在线工具正在使用Scala版本2.10.3,并且我正在运行2.11.7

所以我不确定这是环境还是我需要帮助Scala编译器。我也试图从本书的作者编译answer,并得到相同的错误。

任何帮助将不胜感激。

+1

当使用repl使用':paste'输入多行scala代码时,应该可以解决您的问题。 – Noah

+0

是的,@Noah是对的。插入为块(即':pa')时,REPL(2.11.7)可以很好地编译它。 – jwvh

+0

如果我使用':load'命令加载.scala文件,这仍然适用吗? – MtEdenCodeLab

回答

0

发布一个答案,以防其他人有类似的问题。

使用REPL :paste命令加载.scala文件,而不是:load命令。

感谢@noah和@jwvh的帮助。