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

use*_*864 0 scala sbt sbt-assembly

我在sbt构建Scala项目(重复输入 :)时遇到问题,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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

而且,我是Scala的新手,但实际上并没有帮助。

编辑:

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

case List("manifest.mf", "index.list", "dependencies") => MergeStrategy.discard
Run Code Online (Sandbox Code Playgroud)

以下内容也不会:(错误:)')' expected but '=>' found.

case List("manifest.mf") | List(("index.list") | List("dependencies") => MergeStrategy.discard
Run Code Online (Sandbox Code Playgroud)

编辑2:

卸下额外的支架可完成以下工作:

case List("manifest.mf") | List("index.list") | List("dependencies") => MergeStrategy.discard
Run Code Online (Sandbox Code Playgroud)

对于那些对该主题感兴趣的人... 在Scala中创建列表的5种方法

V-L*_*amp 5

通常,"manifest.mf" :: Nil与`List(“ manifest.mf”)相同。这只是使列表匹配或模式匹配的一种方法。

对于unapplyScala中的模式匹配(也可以是search )工作原理,有很多很好的资源,主要用于case语句中。

这表示:如果该列表中有一个元素,那就是一个(manifest.mfindex.listdependencies)然后选择MergeStrategy.discard