这些短语的含义:
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)
}
在您的示例中,
_*
表示一切,@
表示匹配
xs @ _*
是案例模式,意味着选择与第一个案例匹配的所有内容 /javax/servlet/*
ps @ _*
表示选取所有匹配为 /* 并带有 html
扩展名
“@”运算符用于在模式匹配中绑定到变量。
<somevar> : _*
用于将可变参数解包为适当类型的序列。
在此示例中,
ps @ _*
告诉模式匹配从 PathList 中检索可变参数作为路径序列。
scala 文档的此页帮助我理解它是如何工作的:scala extractor-objects 还有程序集插件的源代码,我在其中找到了 Pathfile 对象定义(在最后):程序集源代码
我没有深入研究整个代码来验证此 Pathfile 对象是否是在本例中真正使用的对象(应该必须确认)。