Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala中字符串的模式匹配_Scala_Haskell - Fatal编程技术网

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中对字符串进行模式匹配:

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

这不是一个真正的答案,而是一组建议我添加了提取器的实现。我认为这应该是一个合适的答案。谢谢。这不是一个真正的答案,但有一组建议我已经添加了提取器的实现。我认为这应该是一个合适的答案。谢谢。我本想补充一个答案,但这个重复的问题很好地解决了这个问题。谢谢你指出这个重复的问题。我的错误(但我很高兴我从即席回答中学到了这一点)我本来打算添加一个答案,但这个重复的问题很好地解决了这个问题。谢谢你指出了这个错误。我的错误(但我很高兴我从即席回答中学到了这一点)