我在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。不是吗?
答案 0 :(得分:0)
这肯定是一个错误,因为编译器不应该只是崩溃,而是发出编译错误。
现在,您的代码也不正确。在用于初始化val的表达式的上下文中有一个return
语句。在这种情况下,没有任何东西可以返回(return
表示从封闭方法返回,但这里没有封闭方法)。
你想要的是这个:
lazy val getName: String = getString match {
case None => ""
case Some(str) => str
}