【发布时间】:2017-09-03 08:26:03
【问题描述】:
Scala 命名提取器示例:
class Foo1(n: Int) {
def isEmpty: Boolean =
false
def get: Foo1 =
this
def _1: Int = n
}
object Foo1 {
def unapply(arg: Foo1) = arg
}
class Foo2(n: Int, nn: Int) {
def isEmpty: Boolean =
false
def get: Foo2 =
this
def _1: Int = n
def _2: Int = nn
}
object Foo2 {
def unapply(arg: Foo2) = arg
}
object Main extends App {
new Foo1(1) match {
case Foo1(n) if n > 0 ⇒ println(n)
}
//Error: value > is not a member of Foo1
//case Foo1(n) if n > 0 ⇒ println(n)
new Foo2(1, 2) match {
case Foo2(n, nn) if n > 0 ⇒ println(s"$n -> $nn")
}
// 1 -> 2
}
我很好奇为什么 Scala 会为一个参数 (Foo1) 提取类实例,但如果参数的数量 > 1 则提取参数 (Foo2(n,nn))。我是否遗漏了什么或它的预期行为?
【问题讨论】: