Ich finde mich viel schreiben (Art) Vorwand Code. Zum Beispiel sagen, ich habe die folgenden MerkmaleScala Fall Klassen und Konstruktoren
trait Foo {
def x: Int
}
trait Bar {
def y: Boolean
def z: String
}
Dann möchte ich eine Fallklasse, die nicht mehr oder weniger als diese implementiert.
case class MyClass(x: Int, y: Boolean, z: String) extends Foo with Bar
scheinen diese nicht ärgerlich, aber jetzt vorstellen, dass meine Züge ein Dutzend def
jeweils s und dass die Namen x
, y
und z
sind viel länger. Das Schreiben der Fallklasse bedeutet, dass ich alle diese Argumente als Argumente von MyClass
neu schreiben muss.
Gibt es eine Möglichkeit, den x: Int, y: Boolean, z: String
Konstruktorteil basierend auf den Eigenschaften, die ich erweitere, automatisch zu generieren?
Nun, Sie können Def mit Def von Ihrer Fallklasse überschreiben. In diesem Fall müssten Sie diese Vals nicht erst generieren. Haben auch alle Implementierungen Ihres Merkmals val Implementierung seiner def? Wenn das der Fall ist, warum würdest du es als def in erster Linie haben und kein val? – tkachuko
@tkachuko Angenommen, ich hätte "val" überall statt "def", wie hilft das? – Alec
hilft es, in den Kontext zu gelangen, den Sie zu lösen versuchen. Sie benötigen eine Art Makro-Tooling: Haben Sie die hier genannten Bibliotheken überprüft: http://stackoverflow.com/questions/22850340/dynamic-creating-case-classes-with-macros? – tkachuko