SBT assembly-plugin 的 PathList 中的“xs @ _*”是什么意思?

问题描述 投票:0回答:3

这些短语的含义:

xs@_*

ps@_*

复制自文档

assemblyMergeStrategy in assembly := {
  case PathList("javax", "servlet", xs @ _*)         => MergeStrategy.first
  case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first
  case "application.conf"                            => MergeStrategy.concat
  case "unwanted.txt"                                => MergeStrategy.discard
  case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}
scala sbt sbt-assembly
3个回答
13
投票

在您的示例中,

_*
表示一切,
@
表示匹配

xs @ _*
是案例模式,意味着选择与第一个案例匹配的所有内容
/javax/servlet/*

ps @ _*
表示选取所有匹配为 /* 并带有
html
扩展名


4
投票

“@”运算符用于在模式匹配中绑定到变量。

<somevar> : _*
用于将可变参数解包为适当类型的序列。

在此示例中,

ps @ _*
告诉模式匹配从 PathList 中检索可变参数作为路径序列。


0
投票

scala 文档的此页帮助我理解它是如何工作的:scala extractor-objects 还有程序集插件的源代码,我在其中找到了 Pathfile 对象定义(在最后):程序集源代码

我没有深入研究整个代码来验证此 Pathfile 对象是否是在本例中真正使用的对象(应该必须确认)。

© www.soinside.com 2019 - 2024. All rights reserved.