特征体

时间:2016-01-10 06:08:00

标签: scala pattern-matching traits

我是Scala的新手,正在阅读本书(Function Programming in Scala)。其中一个练习涉及复制Option特征及其功能。但是我在REPL中编译我的解决方案时遇到了问题。

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 个答案:

答案 0 :(得分:0)

如果其他人有类似问题,则发布答案。

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

感谢@noah和@jwvh的帮助。