Qual è il significato di colon, sottolineano e stelle di SiteMap di ascensore (voci: _ *)?
Domanda
Scala e ascensore allo stesso tempo e sono rimasto bloccato sulla comprensione della sintassi utilizzata per inintialize Mappa del sito nel 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:_*))
Che cosa è esattamente il significato del parametro Sitemap? Vedo che il valore di voci è una lista di Menu. Qual è il del colon, sottolineare, stella ? In un primo momento ho pensato che è un metodo sulla lista, ma sono in grado di trovare tale definizione ...
Soluzione
OK, dopo il mio collega accennato a me, che ha incontrato questo incantesimo segreto nel Programmazione a Scala libro, ho fatto una ricerca nella mia copia e l'ho trovato descritta in Sezione 8.8 parametri ripetuti . (Anche se c'è bisogno di cercare con spazio tra i due punti e sottolineatura: - /) V'è un'una frase per spiegare come:
... aggiungere l'argomento array con due punti e un
_*
il simbolo, in questo modo:scala> echo(arr: _*)
Questa notazione dice al compilatore di passare ogni elemento del
arr
come proprio argomentoecho
, piuttosto che tutto questo come un singolo argomento.
Trovo il descrizione offerto qui più utile.
Quindi x: _*
è come una dichiarazione di tipo che dice al compilatore di trattare x
come parametro ripetuto (alias di lunghezza variabile lista di argomenti - vararg ).