2014-11-25 42 views
6

我可以做这样的事情有串的末尾模式匹配:头::字符串

s match { 
    case "" => ... 
    case head +: tail => ... 
} 

其中head是第一个字符和tail是剩下的字符串?

在上面的代码中,head的类型是Any,我希望它是StringChar

回答

7

case h +: t表示case +:(h, t)。有object +:unapply方法。

对象+:方法unapply只被定义为SeqLikeString和不SeqLike

你需要一个定制unapply方法是这样的:

object s_+: { 
    def unapply(s: String): Option[(Char, String)] = s.headOption.map{ (_, s.tail) } 
} 

"abc" match { 
    case h s_+: t => Some((h, t)) 
    case _ => None 
} 
// Option[(Char, String)] = Some((a,bc))