2

我在 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)

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

4

1 回答 1

0

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

lazy val getName: String = getString match {
  case None => ""
  case Some(str) => str
}
于 2013-04-09T12:18:59.730 回答