我尝试创建一个unapply
模式匹配中使用的方法,我试图让它返回与Option
但是,Eclipse 将其显示为错误。有没有这样的规定unapply
必须返回一个Option[T]
?
编辑:这是我尝试使用的代码。我切换了上一节的代码,以便unapply
返回一个布尔值
import java.util.regex._
object NumberMatcher {
def apply(x:String):Boolean = {
val pat = Pattern.compile("\\d+")
val matcher = pat.matcher(x)
return matcher.find
}
def unapply(x:String):Boolean = {
val pat = Pattern.compile("\\d+")
val matcher = pat.matcher(x)
return matcher.find
}
}
object x {
def main(args : Array[String]) : Unit = {
val strings = List("geo12","neo493","leo")
for(val str <- strings) {
str match {
case NumberMatcher(group) => println(group)
case _ => println ("no")
}
}
}
}
日食 说wrong number of arguments for object NumberMatcher
。这是为什么?
如果您想退货unapply
, 将其返回到里面Some
。返回Boolean
只是测试是否可以匹配。
以下是模式匹配的翻译方式:
str match {
case NumberMatcher(group) => println(group)
case _ => println("no")
}
假设NumberMatcher
回报Option[...]
,它会做:
val r1 = NumberMatcher.unapply(str)
if (r1 != None) {
val group = r1.get
println(group)
} else {
println("no")
}
If NumberMatcher
返回布尔值,然后你可以让它接收一些东西。在这种情况下,会发生以下情况:
str match {
case NumberMatcher() => println("yes")
case _ => println("no")
}
becomes
val r1 = NumberMatcher.unapply(str)
if (r1) {
println("yes")
} else {
println("no")
}
请注意,这是一个非常肤浅解释。大小写匹配可以测试常量、具有额外的保护条件、替代方案、使用unapply
递归地,使用unapplySeq
等等。这里我仅展示解决特定问题的非常基本的用法。我强烈建议寻找模式匹配的更全面的解释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)