2012-05-30 3 views
3

Je travaille avec le jeu 2.0 avec java environ un mois et il y a une chose que je ne peux vraiment pas comprendre. Comment les modèles fonctionnent-ils vraiment? Quelle est la meilleure façon de leur passer des params?Jouer la parenthèse 2.0 dans l'argument modèle

Quelle est la différence entre

@(name: String, value: String) 

et

@(name: String)(value: String) 

Est-ce que pour des raisons pratiques?

J'ai trouvé this question qui soulève le voile du secret, mais il ne dit pas dans quel sens je devrais choisir.

Répondre

4

exemple canonique serait:

// main.scala.html

@(title: String)(content: Html) 
.... 

// index.scala.html

@main("Foo Title") { 
    <div>this content Html param passed in as a block {}</div> 
} 

avec: @(title: String, content: Html)

la syntaxe n'est pas tout à fait aussi bien:

@main("Foo Title", { 
    <div>...</div> 
}) 
+0

Et encore une question: are {} entre crochets pour HTML seulement? –

+0

@AlexPovar dans ce cas, eh bien, oui, l'argument de la méthode est de type Html ;-) Vous pouvez l'appliquer n'importe où, pas seulement le calque de modèle, il fait partie du langage Scala lui-même; si vous avez def foo (a: Int) (b: Unit) = b, vous pouvez l'appeler comme foo (1) {println ("bar")} – virtualeyes

3

Dans le premier cas, vous transmettez plusieurs paramètres à une fonction. Dans le second cas, vous utilisez currying. Selon Wikipedia:

En mathématiques et en informatique, curryfication est la technique de transformation d'une fonction qui prend plusieurs arguments (ou un n-tuple d'arguments) de telle sorte qu'il peut être appelé comme une chaîne de fonctionne chacune avec un seul argument (application partielle). http://en.wikipedia.org/wiki/Currying

Ce qui diffère le mieux par cas d'utilisation. Editer: notez que les modèles ne sont que des fonctions Scala.

+0

O, merci. Trop de programmation fonctionnelle pour ma tête aujourd'hui :) –