2014-11-25 16 views
6

मैं एक तार के साथ कुछ इस तरह कर सकते हैं के लिए पूंछ पैटर्न मिलान:सिर :: तार

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

जहां head पहले चरित्र है और tail शेष स्ट्रिंग है?

उपर्युक्त कोड में head का प्रकार Any है, और मुझे यह String या Char होना चाहिए।

उत्तर

7

case h +: t का अर्थ case +:(h, t) है। unapply विधि के साथ object +: है।

विधि unapply वस्तु +: की SeqLike के लिए ही परिभाषित किया गया है और StringSeqLike नहीं है।

आप इस तरह 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))