2016-07-23 1 views
0

-je intégrer 2.5 modèle qui commence à partir de la déclaration suivante:Twirl valeur du paramètre par défaut du modèle est pas appliqué

@(title: String)(content: Html)(menu:Html = HtmlFormat.empty)(implicit request:Request[AnyContent]) 

Ainsi, le second paramètre est déclaré avoir une valeur par défaut.

Maintenant, dans le contrôleur Je possède ce générateur d'action:

def document(title:String) = Action.async{implicit request => 
    documentService.findByTitle(title).map{ 
     case Some(d) => Ok(views.html.document(d)) 
     case None => Ok(main("No document found")(content = Html("There is no such document"))) 
    } 
    } 

Je ne passe pas la valeur du paramètre menu à l'invocation de modèle et j'attendre à ce que la compilation et le travail en fonction du paramètre par défaut valeurs sémantique, mais je reçois cette erreur de compilation:

[error] D:\Projects\feed\app\controllers\MainController.scala:28: missing arguments for method apply in class main; 
[error] follow this method with `_' if you want to treat it as a partially applied function 
[error] case None => Ok(main("No document found")(content = Html("There is no such document"))) 
[error]          ^
[error] one error found 
[error] (compile:compileIncremental) Compilation failed 

Pourriez-vous expliquer ce qui ne va pas ici?

Répondre

2

Ajouter une paire de parenthèses supplémentaire.

Ok(main("No document found")(content = Html("There is no such document")())) 

Sans la dernière parenthèse - c'est juste une fonction qui attend un argument de plus. Vous pouvez vérifier le type de fonction que vous appelez. Je vais montrer sur mes exemples:

def foo(a: Int = 3) = 41 

val one = foo //wan't compile 
val two: (Int) => Int = foo 
val three: Int = foo() 
+0

Enver, c'est parce que j'ai le paramètre 'menu' dans un groupe de paramètres séparé, non? –

+0

@AlexanderArendar pas exactement. Vous n'avez pas appelé correctement la fonction. Je ne peux pas mettre de code ici, donc j'ai mis à jour la réponse. – EnverOsmanov