[英]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
的結果根本不會再次進行模式匹配。 而是調用方法isEmpty
和get
。 因此,您的示例將給出:
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.