这有效...
val re = "a.c".r
"abc" match {
case re() => "HIT"
case _ => "miss"
}
//res0: String = HIT
...因为Regex
类(因此每个Regex
实例)都有一个unapplySeq()
方法,该方法在模式匹配时被调用。
但是只有在Regex
变量re
是val
的情况下,它才有效。如果是var
或def
,则不会编译Error: not found: value re
。我认为这是因为,模式匹配的LHS必须为Stable Identifier,而vars / defs不符合条件。
这也可以...
implicit class RE(sc :StringContext) {
def re = "a.c".r
}
"abc" match {
case re"" => "HIT"
case _ => "miss"
}
//res1: String = HIT
...由于以下转换:
re""
创建一个StringContext
实例RE
的实例re
的成员Regex
unapplySeq()
被调用,并且模式匹配与以前一样进行请注意,在这种情况下,re
变量不一定是val
。无论是val
,var
还是def
都没有关系。还要注意,re""
不是独立的构造。它不会在此模式匹配上下文之外进行编译。
因此,如果所有这一切都相当准确,那么问题是:稳定标识符在哪里?在什么时候实现了?