Geo*_*Geo 2 language-features functional-programming scala pattern-matching
我仍然是Scala noob,这让我很困惑:
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):Option[String] = {
val pat = Pattern.compile("\\d+")
val matcher = pat.matcher(x)
if(matcher.find) {
return Some(matcher.group())
}
None
}
}
object x {
def main(args : Array[String]) : Unit = {
val strings = List("geo12","neo493","leo")
for(val string <- strings) {
string match {
case NumberMatcher(group) => println(group)
case _ => println ("no")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想为包含数字的字符串添加模式匹配(所以我可以了解更多关于模式匹配的内容),并且unapply
我决定返回一个Option[String]
.但是,在NumberMatcher案例中的println中,group
被视为String而不是Option
.你能解开一些光吗?运行此命令时产生的输出是:
12,493,no
看看这个例子.
如果成功提取一个,则unapply
返回该方法Some value
,否则返回None
.所以在内部
case NumberMatcher(group) => println(group)
Run Code Online (Sandbox Code Playgroud)
调用unapply
并查看它是否返回某个值.如果是这样,我们已经有了真实的结果,因此没有Option
类型.模式匹配从选项中提取返回的值.
归档时间: |
|
查看次数: |
167 次 |
最近记录: |