scala - 双冒号(或冒号-冒号)::在 Scala 中是什么意思?

标签 scala collections functional-programming sbt sbt-assembly

我的 Scala 项目的 sbt 构建有问题(重复条目: META-INF/MANIFEST.MF)和以下几行解决了问题:

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs @ _*) =>
    (xs map {_.toLowerCase}) match {
      case ("manifest.mf" :: Nil) | ("index.list" :: Nil) | ("dependencies" :: Nil) => MergeStrategy.discard
      case _ => MergeStrategy.last
    }
}

我现在正试图理解双冒号在上述上下文中的含义。我在 Quora 中找到了答案, 但这没有帮助。

此外,我是 Scala 的新手,这对我帮助不大。

编辑:

看到答案,我仍然不明白为什么我们正在创建一个列表,但以下内容不起作用(重复的 manifest.mf 条目不会被丢弃):

case List("manifest.mf", "index.list", "dependencies") => MergeStrategy.discard

但是下面的是:

case List("manifest.mf") | List("index.list") | List("dependencies") => MergeStrategy.discard

对于那些对该主题感兴趣的人... 5 ways to create lists in Scala .

最佳答案

一般来说,"manifest.mf"::Nil 和`List("manifest.mf") 是一样的。 它只是一种制作或模式匹配列表的方法。

关于模式匹配(也搜索 unapply)在 Scala 中如何工作,有很好的资源,主要用于 case 语句。

这里说:如果该列表有一个元素,并且是 (manifest.mf,index.list, dependencies ) 然后选择 MergeStrategy.discard

关于scala - 双冒号(或冒号-冒号)::在 Scala 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55849682/

相关文章:

java - 从在 R 中创建的 pmml 在 Scala/Java 中加载模型

Java 集合。创建排序 View 而不创建副本

haskell,IO Monoid 关联性被打破了吗?

javascript - 函数式 javascript 根据某些映射重新排列数组索引

scala - rdd.collect()。toMap与rdd.collectAsMap()之间的区别?

scala - Databinder调度: Get uncompressed content of a 403 response

java - 什么时候 ArrayList 比 Java 中的数组更可取?

haskell - 为什么我的 haskell 程序内存不足?

scala - 是否可以通过历史编号在 spark-shell 中重新运行命令?

php - PHP 中的什么集合可以对出现次数进行计数和排序