scala - 在 case 语句中间使用 unapply 的对象

标签 scala

scala> object Test {
         def unapply[L,R](v: (L, R)) = Some(v)
       }
defined object Test

scala> (1, 2) match {
         case 1 Test 2 => println("First")
         case Test((1, 2)) => println("Second")
         case _ => println("Third")
       }
First

有人可以解释为什么第一个案例使用元组的两个值之间的对象吗?

最佳答案

来自Scala Specifications 8.1.10 :

Infix Operation Patterns
An infix operation pattern p;op;q is a shorthand for the constructor or extractor pattern op(p,q).

所以

case 1 Test 2 => println("First")

被重写为

case Test(1, 2) => println("First")
<小时/>

实际上,您可以通过添加 //print 在 REPL 中看到这一点在行尾并按 <tab>两次:

scala> (1, 2) match { case 1 Test 2 => println("First") } //print
   scala.Tuple2.apply[Int, Int](1, 2) match {
     case $line10.$read.$iw.$iw.Test(1, 2) => scala.Predef.println("First")
   } // : Unit

关于scala - 在 case 语句中间使用 unapply 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41684754/

相关文章:

scala - 我应该如何在我的 Scala 应用程序中组织隐式?

java - 创建不与注入(inject)器绑定(bind)的 Guice 单例

json - 使用 Jerkson 解析忽略字段,预计会出现有效值错误

java - Eclipse Luna 的 Scala 插件

json - 使用 Akka Stream 流式传输巨大的 json

scala - 持久性在Spark中的工作方式

algorithm - 寻找所有可能和独特的组合

scala - 如何将 Some 与mockito中的任何值相匹配

使用 sbt 的 Scala 项目抛出 NullPointerException

Scala:生成伴随对象