scala - 将字符串匹配为 Seq[Char] 的模式

标签 scala pattern-matching

在 Scala 中,可以通过将字符串视为 Seq[Char] 来根据字符串的单个字符来制定模式。

A Tour of Scala 中提到了此功能的一个示例。

这是那里使用的示例代码:

object RegExpTest1 extends Application {
 def containsScala(x: String): Boolean = {
   val z: Seq[Char] = x
   z match {
      case Seq('s','c','a','l','a', rest @ _*) =>
                println("rest is "+rest)
                true
      case Seq(_*) =>
                false
   }
 }

}

我遇到的问题是代码片段的第三行:
val z: Seq[Char] = x

为什么需要这种 Actor 阵容?在所有情况下(包括模式匹配),字符串不应该像 Seq[Char] 一样吗?但是,如果没有这种转换,代码片段将无法工作。

最佳答案

不能 100% 确定这是否正确,但我的直觉是,如果没有这个明确的强制转换,您将与 java.lang.String 进行模式匹配。 ,这不是您想要的。

显式转换强制 Scala 编译器使用 Predef.stringWrapper 隐式转换;因此,如 RichString扩展 Seq[Char] ,您可以进行模式匹配,就好像字符串是一个字符序列一样。

关于scala - 将字符串匹配为 Seq[Char] 的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/740563/

相关文章:

java - 需要高性能 Scala/Java 集合

scala - 在系统启动时安排重复 Actor Play 2.4.3

scala - 在数据帧上执行 groupby 时连接 maptype 值

Python:模式匹配(?)

F# 检查列表是否已排序的函数

scala - SBT 0.12.0 和 Scala 2.10.0 的 sbt-idea 1.2.0 未解决?

scala - 如何让 Gradle、Scoverage 和 Sonarqube 正常工作?

pattern-matching - "Invalid expression in guard, case is not allowed in guards"错误

macros - 定义匹配扩展器

Erlang 模式不匹配,但正确,该怎么办?