2017-06-11 4 views
-1

Ich habe ein Objektscala Umbenennungsfall-Klasse Eigenschaft dynamisch

object Helper{ 
val fieldName = "fooBar 
} 

, die für ein Feld der Namen zur Verfügung stellt. Und ein Fall Klasse

case class BarBaz(fieldOne:Int, fieldTwo:String) 

Aber statt fieldTwo, würde Ich mag zu Helper.fieldname für den Parameter Namen der Fallklasse verweisen.

Wie kann dies in Scala erreicht werden? Vielleicht über ein Makro? Oder gibt es eine einfachere Möglichkeit? I.e.

case class BarBaz(fieldOne:Int, Helper.fieldName:String) 

würde die gewünschte Ausgabe, aber das wird nicht kompilieren.

+0

Aufruf als BarBaz.fieldTwo oder Helper.fieldName, sind sie nicht die gleichen? Sie müssen eine Instanz von beiden erstellen. Können Sie den Feldnamen der Fallklasse nicht ändern? –

+0

Ich möchte in der Lage sein, den Feldnamen der Fallklasse zu ändern, indem ich den Wert 'fieldName' ändere. Bitte beachten Sie die Änderung. –

+0

Nicht sicher, was Sie hier erreichen wollen, aber "Map [String,?]" Ist möglicherweise eine einfachere Methode, um mit einem "dynamischen Bezeichner" auf Objekte zuzugreifen. – rethab

Antwort

1

Ich glaube nicht, dass es als definierende Variablen möglich ist, auf einen Speicherort zu verweisen, in dem der Wert gespeichert ist. So sieht die compiler einen Variablennamen als Speicherort Adresse und nicht den Wert an diesem Ort gespeichert und die Verwendung eines Speicherplatzes für einen Variablennamen wäre nicht erlaubt.

+0

Aber könnte es zu einem Kompilierzeitproblem über Makros umgewandelt werden? –

Verwandte Themen