首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是Scala中的unapply方法?

什么是Scala中的unapply方法?
EN

Stack Overflow用户
提问于 2014-08-03 05:01:51
回答 1查看 1.3K关注 0票数 3

什么是unapply方法是Scala?它怎麽工作?

我知道其他语言中的模式匹配,比如OCaml,通常您对它的控制很少。Scala在提供unapply方法方面是独一无二的,还是有其他语言提供了控制模式匹配的机制?

EN

回答 1

Stack Overflow用户

发布于 2014-08-03 05:23:30

在Scala中,unapply也称为提取器方法,例如,考虑如下所示

代码语言:javascript
复制
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)

对于列表,可以很容易地找到提取器的其他示例,例如:

代码语言:javascript
复制
List(1,2,3,4) match { 
  case head :: tail => doSomething()
  case first :: second :: tail => doSomethingElse
  case Nil => endOfList()
}

这是可能的,因为unapply方法的定义方式不同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25099381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档