什么是unapply
方法是Scala?它是如何工作的?
我知道其他语言中的模式匹配,例如OCaml,通常你几乎无法控制它。 Scala在提供unapply
方法方面是独一无二的,还是有其他语言提供控制模式匹配的机制?
答案 0 :(得分:3)
在Scala unapply
中也称为提取器方法,例如考虑这个
scala> object SomeInteger {
|
| def apply(someInt: Int): Int = someInt
|
| def unapply(someInt: Int): Option[Int] = if (someInt > 100) Some(someInt) else None
| }
defined module SomeInteger
scala> val someInteger1 = SomeInteger(200)
someInteger1: Int = 200
scala> val someInteger2 = SomeInteger(0)
someInteger2: Int = 0
scala> someInteger1 match {
| case SomeInteger(n) => println(n)
| }
200
scala> someInteger2 match {
| case SomeInteger(n) => println(n)
| case _ => println("default")
| }
default
正如您所看到的,第二场比赛打印default
,因为SomeInteger
的取消申请方法会返回None
而不是SomeInteger(n)
。
例如,可以很容易地找到提取器的其他示例:
List(1,2,3,4) match {
case head :: tail => doSomething()
case first :: second :: tail => doSomethingElse
case Nil => endOfList()
}
这是可能的,因为定义了unapply
方法。