Scala 如何匹配底层中的“选项”?

Scala 如何匹配底层中的“选项”?,scala,pattern-matching,Scala,Pattern Matching,它说,在Scala中,模式匹配将被转换为调用不适用(…):Option[…] 在这里,我定义了一个对象,其未应用: object Hello { def unapply(s:String): Option[String] = Some(s) } 然后我可以在模式匹配中使用它: "hello" match { case Hello(s) => println(s) } 实际上(可能)它将转换为: Hello.unapply("hello") match { case Som

它说,在Scala中,模式匹配将被转换为调用
不适用(…):Option[…]

在这里,我定义了一个对象,其
未应用

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类
,因此将调用
Some.unapply

这应该是无限的。这是不可能的


那么Scala模式如何匹配底层中的
选项

不应用
的结果不再匹配模式。相反,调用方法
isEmpty
get
。因此,您的示例将给出:

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

从2.11开始,甚至不需要返回
选项
。任何具有方法
的类都是空的:布尔的
和方法
get:a
就可以了。

未应用
的结果不会再次进行模式匹配。相反,调用方法
isEmpty
get
。因此,您的示例将给出:

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

从2.11开始,甚至不需要返回
选项
。任何具有方法
的类都是空的:布尔的
和方法
get:a
就可以了。

未应用
的结果不会再次进行模式匹配。相反,调用方法
isEmpty
get
。因此,您的示例将给出:

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

从2.11开始,甚至不需要返回
选项
。任何具有方法
的类都是空的:布尔的
和方法
get:a
就可以了。

未应用
的结果不会再次进行模式匹配。相反,调用方法
isEmpty
get
。因此,您的示例将给出:

val temp = Hello.unapply("hello")
if (!temp.isEmpty) {
  val s = temp.get
  println(s)
} else {
  throw new MatchError()
}
从2.11开始,甚至不需要返回
选项
。任何具有方法
isEmpty:Boolean
和方法
get:a
的类都可以。