簡體   English   中英

如何在基礎中對`Option`進行模式匹配?

[英]How to pattern-match an `Option` in the underlying?

它說在Scala中,模式匹配將轉換為對unapply(...):Option[...]的調用。

在這里,我定義了一個對象unapply

object Hello {
  def unapply(s:String): Option[String] = Some(s)
}

然后,我可以在模式匹配中使用它:

"hello" match {
   case Hello(s) => println(s)
}

實際上(也許)它將被轉換為:

Hello.unapply("hello") match {
  case Some(s) => println(s)
  case _ =>
}

但是Some這里也是case class ,因此Some.unapply將被調用。

那應該是無限的。 這是不可能的。

那么Scala模式如何匹配底層的Option

unapply的結果根本不會再次進行模式匹配。 而是調用方法isEmptyget 因此,您的示例將給出:

val temp = Hello.unapply("hello")
if (!temp.isEmpty) {
  val s = temp.get
  println(s)
} else {
  throw new MatchError()
}

從2.11開始,甚至沒有必要專門返回Option 任何具有isEmpty: Boolean方法和get: A方法get: A都可以。

暫無
暫無

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

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