_ *用法是scala模式匹配

约翰

在下面的示例中,我对_ *的用法感到有些困惑。它的行为方式有所不同,因此我完全迷失了这一点。

val p1="scala".r
val p2="([0-9]+[.]?[0-9]*|[.][0-9]+)$".r

"scala" match {case p1(_) => true case _  => false } // return false


"scala" match {case p1(_ *) => true case _  => false }  // return true

"9" match {case p2(_) => true case _ => false} // return true

提前致谢。

维克多·史翠比维

match图案中的需要,因为你正在使用至少一个捕获组case(_)这是因为“ match-case”使用unapplySeq(target: Any): Option[List[String]],它返回捕获组的值,并且您需要使用1个捕获的值_使用_ *,您将忽略此要求。请参阅Scala regex参考

要只检查正则表达式是否匹配,忽略任何组,请使用序列通配符

"2004-01-20" match { case date(_*) => "It's a date!" }

p2包含一个捕获组,因此最后一行返回true。

您的p1不包含捕获组,因此第一个match失败。第二个没有,因为您使用禁用了此要求*

作为替代方案,您可以使用case p1()第一行(_此处删除代表必要的第一捕获组),它也将起作用:

"scala" match {case p1() => true case _  => false }) // return true

观看此IDEONE演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章