鉴于 Scala 中的这个定义:
class Foo(val n: Int)
object Foo {
def unapply(foo: Foo): Option[Int] = Some(foo.n)
}
此表达式编译并返回
ok
:new Foo(1) match {
case Foo() => "ok"
}
Option[T]
的提取器意味着只匹配一个参数的模式。 Foo()
这里的意思?是否相当于Foo(_)
? 换句话说,使经验行为成为可能的语言规则是什么。
最佳答案
the Scala Language Reference 的第 8.18 节讨论这种类型的模式匹配。根据引用资料,对于像 Foo()
这样的模式,它应该只匹配 unapply
返回一个 bool 值。如 unapply
返回 Option[T]
对于某些不是元组的 T,则该模式必须仅包含一个参数,例如Foo(_)
.除非我真的误解了这里发生的事情,否则看起来这是编译器违反规范的边缘情况。
关于scala - 当一个 arg 预期时,零 arg 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459833/