head ::用于字符串的尾部模式匹配

时间:2014-11-25 07:03:19

标签: scala pattern-matching

我可以用字符串做这样的事情:

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

其中head是第一个字符,tail是剩余的字符串吗?

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

1 个答案:

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