2017-10-03 2 views
1

Ich habe einige der anderen Probleme mit dem berüchtigten "22 Felder/Parameter" Problem, das ein inhärenter Fehler (Feature?) Von Scala V < 2.11 ist. Siehe here und here. Gemäß dieser blog post scheint es jedoch so, dass die 22 Parametergrenze in case class festgelegt wurde; zumindest was die Sprache betrifft.Verwenden von Play Framework und Fall-Klasse mit mehr als 22 Parametern

Ich habe eine case class, die ich eine beliebige (Lesen:> 22) Anzahl von Werten laden möchte, in die später in ein JSON-Objekt mit der Play-Bibliothek gelesen werden wird.

Es sieht ungefähr so ​​aus:

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) 

Das Problem ist, dass bei der Kompilierung, klagt Scala, dass es mehr als 22 Parameter im case class ist. (Genauer gesagt: in der letzten Zeile der Objektdefinition, wenn der Compiler versucht zu bauen, bekomme ich: "Implementation beschränkt Funktionen auf 22 Parameter.") Ich benutze derzeit Scala v2.11.6, also denke ich es ist kein Sprachproblem. Das lässt mich denken, dass die Play-Bibliothek ihre Implementierung von Read nicht aktualisiert hat.

Wenn das der Fall ist, dann denke ich, ist die beste Wette, verwandte Felder in Tuples zu gruppieren und die Tuples durch die JSON API zu übergeben?

Antwort

1

Wie in dem Blogbeitrag erwähnt, auf den Sie verwiesen haben, ist das 22-Parameter-Limit für Funktionen in Scala 2.11 und höher immer noch wirksam. Sie haben also ein Sprachproblem gefunden. Der Funktionsaufruf lautet in diesem Fall:

Das Umstrukturieren Ihres Modells ist eine Möglichkeit, mit diesem Limit umzugehen

Verwandte Themen