2017-10-03 1 views
1

J'ai vu certains des autres problèmes impliquant le fameux problème "22 champs/paramètres" qui est un bug inhérent (fonctionnalité?) De Scala V < 2.11. Voir here et here. Cependant, selon ce blog post, il semble que la limite de 22 paramètres dans case class a été fixée; au moins où la langue est concernée.Utilisation de Play Framework et de la classe de cas avec plus de 22 paramètres

J'ai un case class que je veux charger un nombre arbitraire (Lire:> 22) de valeurs dans lequel sera plus tard lu dans un objet JSON en utilisant la bibliothèque de lecture.

Il ressemble à ceci:

object L { 
    import play.api.libs.json.Reads. _ 
    import play.api.libs.functional.syntax._ 

    implicit val responseRead: Reads[L] = (
    MyField1.jsPath.Read[MyField1.t] and 
    MyField2.jsPath.Read[MyField2.t] and 
    ... 
    MyField35.jsPath.Read[MyField35.t] 
) (L.apply _) 
} 

case class L(myField1: MyField1.t, myField2: MyField2.t, ... myField35: MyField35.t) 

Le problème est que sur la compilation, Scala se plaint qu'il ya plus de 22 paramètres dans le case class. (Spécifiquement: sur la dernière ligne de la définition de l'objet, quand le compilateur tente de construire, j'obtiens: "l'implémentation limite les fonctions à 22 paramètres".) J'utilise actuellement Scala v2.11.6, donc pense que ce n'est pas un problème de langue. Cela me fait penser que la bibliothèque Play n'a pas mis à jour leur implémentation de Read.

Si c'est le cas, alors je suppose que le meilleur pari est de grouper des champs liés dans Tuples et de passer les Tuples à travers l'API JSON?

Répondre

1

Comme mentionné dans l'article de blog que vous avez référencé, la limite de 22 paramètres est toujours en vigueur pour les fonctions de Scala 2.11 et ultérieures, donc ce que vous avez rencontré est un problème de langue. L'appel de fonction dans ce cas est:

L.apply _ 

La restructuration de votre modèle est une façon de gérer cette limite.