2015-09-08 3 views
0

Je suis nouveau à Play et Scala aussi bien. Et je rencontre un problème avec i18n lors de la lecture du livre "Jouer avec Scala". Le problème était l'objet Messages, qui doit être obtenu dans chaque modèle pour permettre à l'application de fonctionner correctement.i18n, Objet de messages dans chaque modèle nécessaire? Jouer Scala

Ce qui me dérange est que même si je ne l'utilise pas l'objet Messages dans un de mes fichiers de modèle Scala, mais je hériterai/appeler un autre modèle dans, je dois encore ajouter (implicit messages: Messages) en haut du fichier . Quelqu'un peut-il m'expliquer pourquoi? Est-il nécessaire d'ajouter l'objet Messages dans chaque modèle? C'est assez problématique et je suis sûr que cela peut être résolu d'une manière ou d'une autre.

Répondre

0

Il ne s'agit pas d'un problème spécifique à Play Framework, mais de la manière dont les paramètres implicites fonctionnent dans Scala (voir Understanding implicit in Scala).

Prenez la fonction suivante qui ajoute "magiquement" un nombre à une liste de nombres.

def addMagic[A](numbers: List[Int])(implicit add: Int) = numbers.map(_ + add) 

Nous pouvons utiliser addMagic comme suit:

{ 
    implicit val magicNumber = 42 
    addMagic(List(1, 2, 3)) 
    // List[Int] = List(43, 44, 45) 
} 

Si nous utilisons addMagic dans une autre fonction sans passer implicitement Int:

def printMagicNumbers(numbers: List[Int]) = println(addMagic(numbers)) 

nous obtenons l'erreur suivante:

error: could not find implicit value for parameter add: Int

Nous avons donc besoin aussi d'ajouter un paramètre implicite à printMagicNumbers:

def printMagicNumbers(numbers: List[Int])(implicit add: Int) = 
    println(addMagic(numbers)) 

De la même manière votre fonction de modèle a besoin d'un objet Messages implicite si elle appelle une fonction de modèle qui a besoin de l'objet Messages.