Scala中字符串的模式匹配
如何在Scala中对字符串进行模式匹配:Scala中字符串的模式匹配,scala,haskell,Scala,Haskell,如何在Scala中对字符串进行模式匹配: scala> "55" match { | case x :: _ => x | } <console>:9: error: constructor cannot be instantiated to expected type; found : scala.collection.immutable.::[B] required: String case x :: _ =&g
scala> "55" match {
| case x :: _ => x
| }
<console>:9: error: constructor cannot be instantiated to expected type;
found : scala.collection.immutable.::[B]
required: String
case x :: _ => x
^
因此,它支持字符串上的模式匹配
如何在Scala中执行此操作?您只需将其转换为列表:
"55".toList
您只需将其转换为列表:
"55".toList
你可以使用提取器。Scala允许您构建自己的解构函数,大多数类似于SeqLike的集合都提供了+:
它的工作原理与:
对于列表的解构类似,不幸的是字符串的解构没有此运算符,仅用于构造
但是您可以为String
定义自己的提取器,如下所示:
object %:: {
def unapply(xs: String): Option[(Char, String)] =
if (xs.isEmpty) None
else Some((xs.head, xs.tail))
}
用法:
scala> val x %:: xs = "555"
x: Char = 5
xs: String = 55
你可以使用提取器。Scala允许您构建自己的解构函数,大多数类似于SeqLike的集合都提供了+:
它的工作原理与:
对于列表的解构类似,不幸的是字符串的解构没有此运算符,仅用于构造
但是您可以为String
定义自己的提取器,如下所示:
object %:: {
def unapply(xs: String): Option[(Char, String)] =
if (xs.isEmpty) None
else Some((xs.head, xs.tail))
}
用法:
scala> val x %:: xs = "555"
x: Char = 5
xs: String = 55
这不是一个真正的答案,而是一组建议我添加了提取器的实现。我认为这应该是一个合适的答案。谢谢。这不是一个真正的答案,但有一组建议我已经添加了提取器的实现。我认为这应该是一个合适的答案。谢谢。我本想补充一个答案,但这个重复的问题很好地解决了这个问题。谢谢你指出这个重复的问题。我的错误(但我很高兴我从即席回答中学到了这一点)我本来打算添加一个答案,但这个重复的问题很好地解决了这个问题。谢谢你指出了这个错误。我的错误(但我很高兴我从即席回答中学到了这一点)