2
我還是斯卡拉小白了,這讓我困惑:爲什麼此選項轉換爲字符串? [斯卡拉]
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")
}
}
}
}
我想補充模式包含數字的字符串匹配(這樣我就可以瞭解更多有關模式匹配),並在unapply
我決定返回Option[String]
。但是,在NumberMatcher案例中的println中,group
被視爲字符串,而不是Option
。你能說出一些光明嗎?當這跑產生的輸出是:
12,493,no
因此'unapply'只能返回一個'Option'類型?它不能直接返回一個字符串? – Geo 2009-12-14 20:17:02
沒錯。無法直接返回字符串。如果確實如此,你會如何表明該模式不匹配。 – 2009-12-14 22:13:19
未應用方法可以返回布爾值,在這種情況下,匹配塊的case子句使用空的模式參數列表。 – 2009-12-15 01:58:16