双冒号(或冒号-冒号):: 在 Scala 中是什么意思?
What does double colon (or colon-colon) :: mean in Scala?
我的 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。
它是 class 的名称(是的,::
是 class 的有效名称)。它被解析为 Nil.::(arg)
,因为以冒号结尾的每个方法都是右关联的,这又解析为 ::(arg, Nil)
。这将构造一个具有给定参数的列表(将元素添加到现有列表中,或者如果在 Nil
上调用则创建一个列表)。
一般来说,"manifest.mf" :: Nil
和`List("manifest.mf")是一样的。
它只是一种制作或模式匹配列表的方法。
关于模式匹配(也搜索 unapply
)在 Scala 中如何工作的很好的资源,主要用于 case
语句。
此处表示:如果该列表有一个元素,并且是 (manifest.mf
、index.list
、dependencies
) 之一,则选择 MergeStrategy.discard
我的 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。
它是 class 的名称(是的,::
是 class 的有效名称)。它被解析为 Nil.::(arg)
,因为以冒号结尾的每个方法都是右关联的,这又解析为 ::(arg, Nil)
。这将构造一个具有给定参数的列表(将元素添加到现有列表中,或者如果在 Nil
上调用则创建一个列表)。
一般来说,"manifest.mf" :: Nil
和`List("manifest.mf")是一样的。
它只是一种制作或模式匹配列表的方法。
关于模式匹配(也搜索 unapply
)在 Scala 中如何工作的很好的资源,主要用于 case
语句。
此处表示:如果该列表有一个元素,并且是 (manifest.mf
、index.list
、dependencies
) 之一,则选择 MergeStrategy.discard