Qual é o significado de cólon, sublinhado e estrelas em do elevador Sitemap (entradas: _ *)?
Pergunta
Estou aprendendo Scala e elevador ao mesmo tempo e eu fiquei preso em compreender a sintaxe utilizada para inintialize o SiteMap na Boot.scala:
val entries = Menu(Loc("Home", "/", "Home")) ::
Menu(Loc("Foo", "/badger", "Foo")) ::
Menu(Loc("Directory Foo", "/something/foo", "Directory Foo")) :: Nil
LiftRules.setSiteMap(SiteMap(entries:_*))
O que exatamente é o significado do parâmetro SiteMap? Vejo que o valor entradas é uma lista de Menu. Qual é o colon, sublinhado, estrela ? No começo eu pensei que é um método na lista, mas eu sou incapaz de encontrar essa definição ...
Solução
OK, depois de o meu colega mencionou para mim, que ele encontrou esse encantamento secreto na em Scala livro, eu fiz uma pesquisa no meu exemplar e achei descrito no Seção 8.8 parâmetros repetidos . (Embora você precisa procurar com espaço entre o cólon e sublinhado: - /) Há uma frase para explicar como:
... anexar o argumento de matriz com dois pontos e um
_*
símbolo, como este:scala> echo(arr: _*)
Esta notação diz o compilador para passar cada elemento da
arr
como seu próprio argumento paraecho
, em vez de tudo isso como um único argumento.
I encontrar o descrição oferecida aqui mais útil.
Assim x: _*
é como uma declaração de tipo que diz ao compilador para x
tratar como parâmetro (lista de argumentos repetidos aka de comprimento variável - vararg ).