簡體   English   中英

懶val上的scala編譯器錯誤

[英]scala compiler error on lazy val

我在scala編譯器中遇到以下錯誤。 我在吉拉找不到問題。 因此,我決定先問一下這是否是已知問題:

我從以下兩種方法開始:

  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)

看起來像個錯誤。 是不是

考慮到編譯器絕不應該崩潰,而應該發出編譯錯誤,這絕對是一個錯誤。 現在,您的代碼也不正確。 在用於初始化val的表達式的上下文中,您具有return語句。 在這種情況下,沒有什么要返回的( return表示從封閉方法中返回,但是這里沒有封閉方法)。 您想要的是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM