2017-03-14 29 views
2

什么这些词组的意思是:SBT程序集插件PathList中的“xs @ _ *”是什么意思?

XS @ _ *

PS @ _ *

documentation复制:

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) 
} 

回答

3

'@' 操作符是用来绑定到模式匹配中的变量。

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

在此示例中,ps @ _*指示模式匹配以从PathList中检索作为路径序列的可变参数。

+0

它是Scala正则表达式语法吗? –

1

在您的例子_*意味着一切,@匹配

xs @ _*区分模式是指选择一个适合第一种情况相匹配的每一件事/javax/servlet/*

ps @ _*意味着拿起所有比赛为/ *,并与html扩展