模式匹配的斯卡拉`class`

问题描述:

我试图实现unapply为类,Foo模式匹配的斯卡拉`class`

object Foo {   
    def unapply(x: Int): Option[Int] = Some(x) 
} 

class Foo(x: Int) 

然而,在REPL失败时,我尝试使用它:

scala> val f = new Foo(100) 

scala> f match { case Foo(x) => x } 
<console>:13: error: pattern type is incompatible with expected type; 
found : Int 
required: Foo 
       f match { case Foo(x) => x } 

为什么我不能使用我为此示例创建的unapply

unapply的参数应该是要匹配的类型的实例:

class Foo(val x: Int) 

object { 
    def unapply(f: Foo): Option[Int] = Some(f.x) 
} 
+0

谢谢'M-z'。这是另一个[示例](http://*.com/a/20032429/409976)为您的解决方案的读者。 – 2014-11-24 03:54:55