2014-11-24 3 views
1

я попытался реализовать unapply для класса, Foo:Pattern Match на Scala `class`

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

class Foo(x: Int) 

Однако она не в РЕПЛ, когда я пытаюсь использовать:

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

Спасибо, 'м-z'. Вот еще один пример (http://stackoverflow.com/a/20032429/409976) для читателей вашего решения. –