类型不匹配; result.type(带底层类型T)和-Xstrict-inference编译器选项

时间:2015-07-08 06:53:41

标签: scala

我正在尝试使用fold方法丰富scala.util.Try类型。我有以下隐含的做法:

implicit class FoldableTry[T](tryable: Try[T]) {
  def fold[X](failure: Throwable => X)(success: T => X): X = {
    tryable match {
      case Success(result) => success(result)
      case Failure(ex) => failure(ex)
    }
  }
}

当我使用 -Xstrict-inference 编译器选项运行 sbt compile 时,出现以下错误:

type mismatch;
[error]  found   : result.type (with underlying type T)
[error]  required: T
[error]         case Success(result) => success(result)
[error]                                         ^
[error] one error found
[error] (compile:compile) Compilation failed

如何修复此错误?如果我删除了编译器标志,它就会编译。

1 个答案:

答案 0 :(得分:2)

看起来你正在遇到bug (SI-6680)。我建议不要使用-Xstrict-inference,因为它听起来很实验 - 请注意Paul Phillip的评论:

  

-Xstrict-inference只是作为一个粗糙的hacky开始,但它恰好与我的离开。我预计它会出现实施问题。