lazy val上的scala编译器错误

时间:2013-04-09 09:59:04

标签: scala

我在scala编译器中遇到以下错误。我在jira找不到问题。因此,我决定首先询问这是否是一个已知问题:

我从以下两种方法开始:

  def getName: String = getString match {
    case None => return ""
    case Some(str) => return str
  }

  def getString: Option[String] = Some("abc")

然后我将第一个方法改为

  lazy val getName: String = getString match {
    case None => return ""
    case Some(str) => return str
  }

不幸的是,我忘了删除return语句。在这种情况下,scala编译器应该以“返回外部方法定义”消息停止,但它真正做的是:

[ant:scalac] error: uncaught exception during compilation: java.lang.NullPointerException

[ant:scalac] java.lang.NullPointerException
[ant:scalac]    at scala.reflect.internal.Trees$class.Select(Trees.scala:1066)
[ant:scalac]    at scala.reflect.internal.SymbolTable.Select(SymbolTable.scala:13)

它看起来像一个bug。不是吗?

1 个答案:

答案 0 :(得分:0)

这肯定是一个错误,因为编译器不应该只是崩溃,而是发出编译错误。 现在,您的代码也不正确。在用于初始化val的表达式的上下文中有一个return语句。在这种情况下,没有任何东西可以返回(return表示从封闭方法返回,但这里没有封闭方法)。 你想要的是这个:

lazy val getName: String = getString match {
  case None => ""
  case Some(str) => str
}