2014-11-25 13 views
6

Czy mogę zrobić coś takiego z ciągiem::: głowa ogon wzorzec dopasowania ciągów

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

gdzie head jest pierwszym znakiem i tail jest pozostały ciąg?

W powyższym kodzie typ head to Any i chciałbym, aby był to String lub Char.

Odpowiedz

7

oznacza case +:(h, t). Jest object +: z metodą unapply.

Metoda unapply obiektu +: jest zdefiniowana tylko dla SeqLike i String nie jest SeqLike.

Trzeba zwyczaj unapply metoda tak:

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))