【发布时间】:2017-03-31 18:36:33
【问题描述】:
我正在尝试编写一个提取器,用于匹配多参数案例类。简化示例:
case class X(p1: String, p2: Int)
我希望每个提取器对象都为 p1 定义一个固定值,而 p2 是在使用时定义的。 (A、B等不能是case类和子类X,我也想用X(,)作为case) 应用方法示例:
object A {
def apply(p2: Int): X = X("A", p2)
}
object B {
def apply(p2: Int): X = X("B", p2)
}
...
对于模式匹配,我希望它们像这样匹配:
X("A", 2) match {
case A(2) => true // <- should match: p1="A" and p2=2
case A(_) => true // <- should match: p1="A" and p2=_
case X("A", _) => true // <- should match: p1="A" and p2=_
case A(1) => false // <- should not match
case B(2) => false // <- should not match: p1="B" and p2=2
}
我知道我需要在A、B 等中定义unapply 方法,但我完全搞不懂签名和逻辑应该是什么:
object A {
def unapply(x: ???): Option[???] = {
???
}
}
请帮忙?
【问题讨论】: