鉴于
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(_)吗?
换句话说,什么是支持经验行为的语言规则.
解决方法
今天(2.11里程碑)你得到错误:
<console>:15: error: wrong number of patterns for object Foo offering Int: expected 1,found 0 case Foo() => "ok" ^
我在添加Regex.unapply(c:Char)时遇到了这个问题.在某些时候,你指出的案件被接受,然后被拒绝.我记得我喜欢这个想法,如果我的提取器返回Some(thing),那么布尔匹配情况r()将与情况r(_)相同.
什么有效在scappdoc unapply(Char):
http://www.scala-lang.org/files/archive/nightly/docs-master/library/#scala.util.matching.Regex