Quel est le sens du côlon, du trait de soulignement et étoiles dans SiteMap ascenseur (entrées: _ *)?
Question
J'apprends Scala et ascenseur en même temps et je suis resté bloqué sur la compréhension de la syntaxe utilisée pour inintialize SiteMap dans le 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:_*))
Quelle est exactement la signification du paramètre SiteMap? Je vois que la valeur entrées est une liste de menu. Quel est le colon, souligner, star ? Au début, je pensais que c'est une méthode sur la liste, mais je ne peux pas trouver cette définition ...
La solution
OK, après mon collègue m'a mentionné qu'il a rencontré cette conjuration secrète dans le Programmation en Scala livre, je l'ai fait une recherche dans ma copie et trouvé décrite dans Section 8.8 paramètres répétés . (Même si vous devez rechercher un espace entre les deux points et underscore: - /) Il y a une phrase pour expliquer comme:
... ajoutez l'argument tableau avec deux points et un
_*
symbole, comme ceci:scala> echo(arr: _*)
Cette notation indique au compilateur de passer chaque élément de
arr
comme son propre argumentecho
, plutôt que tous comme un seul argument.
Je trouve le description donnée ici plus utile.
x: _*
est comme une déclaration de type qui indique au compilateur de traiter x
comme Paramètre répété (liste alias argument de longueur variable - vararg ).