Scala取消应用-自定义提取器
示例
可以通过实现unapply方法并返回type值来编写自定义提取Option:
class Foo(val x: String) object Foo { def unapply(foo: Foo): Option[String] = Some(foo.x) } new Foo("42") match { case Foo(x) => x } // "42"
的返回类型unapply可能会比其他的东西Option,提供返回的类型提供get和isEmpty方法。在此示例中,Bar使用这些方法定义,并unapply返回的实例Bar:
class Bar(val x: String) { def get = x def isEmpty = false } object Bar { def unapply(bar: Bar): Bar = bar } new Bar("1337") match { case Bar(x) => x } // "1337"
的返回类型unapply也可以是Boolean,这是特殊情况,不包含get和isEmpty要求。但是,请注意在此示例中,它DivisibleByTwo是一个对象,而不是一个类,并且没有参数(因此该参数无法绑定):
object DivisibleByTwo { def unapply(num: Int): Boolean = num % 2 == 0 } 4 match { case DivisibleByTwo() => "yes" case _ => "no" } //是 3 match { case DivisibleByTwo() => "yes" case _ => "no" } //没有
请记住,它unapply放在类的伴侣对象中,而不是在类中。如果您理解这种区别,上面的示例将很清楚。