什么是unapply方法是Scala?它怎麽工作?
我知道其他语言中的模式匹配,比如OCaml,通常您对它的控制很少。Scala在提供unapply方法方面是独一无二的,还是有其他语言提供了控制模式匹配的机制?
发布于 2014-08-03 05:23:30
在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的unapply方法返回的是None而不是SomeInteger(n)。
对于列表,可以很容易地找到提取器的其他示例,例如:
List(1,2,3,4) match {
case head :: tail => doSomething()
case first :: second :: tail => doSomethingElse
case Nil => endOfList()
}这是可能的,因为unapply方法的定义方式不同。
https://stackoverflow.com/questions/25099381
复制相似问题