我可以用字符串做这样的事情:
s match {
case "" => ...
case head +: tail => ...
}
其中head
是第一个字符,tail
是剩余的字符串吗?
在上面的代码中,head
的类型为Any
,我希望它为String
或Char
。
答案 0 :(得分:7)
case h +: t
表示case +:(h, t)
。 object +:
采用unapply
方法。
对象unapply
的方法+:
仅针对SeqLike
定义,String
不是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))