什么是Scala中的unapply方法?

时间:2014-08-02 21:01:51

标签: scala pattern-matching

什么是unapply方法是Scala?它是如何工作的?

我知道其他语言中的模式匹配,例如OCaml,通常你几乎无法控制它。 Scala在提供unapply方法方面是独一无二的,还是有其他语言提供控制模式匹配的机制?

1 个答案:

答案 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方法。