2014-11-24 132 views
1

我試圖實現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

回答

4

unapply的參數應該是要匹配的類型的實例:

class Foo(val x: Int) 

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

謝謝'M-z'。這是另一個[示例](http://stackoverflow.com/a/20032429/409976)爲您的解決方案的讀者。 – 2014-11-24 03:54:55