2016-08-29 6 views
0

Ich möchte eine Funktion definieren können, die ein Case-Klasse-Feld Name als Parameter verwendet und den Wert dieses Feldes verwendet. Betrachten Sie den folgenden Code:Case-Case-Feldwert mit einem Wert

Gibt es einen Weg in scala zu erreichen, was dieser Code versucht zu tun? Ich konnte diese Frage bei S/O nicht finden, also vermute ich, dass dies nicht etwas ist, was ich versuchen sollte. Wenn das stimmt, warum ist das der Fall?

Antwort

1

Mit einigen grundlegenden Textbearbeitung/Makros, die Sie nur eine Funktion wie

def clock_field(clock: Clock, field: String): Any = { 
    field match { 
    case "hour" => clock.hour 
    case "minute" => clock.minute 
    } 
} 

Mein scala ist nicht stark genug vorstellen konnte, dass ziemlich zu machen, aber einen beliebigen Text-Editor, der für Makros ermöglicht sollten Erzeugung diejenigen machen einfach.

0

Sie können versuchen, hier zu verwenden. Betrachten Sie das folgende Beispiel:

class Clock extends Dynamic { 
    def selectDynamic(field: String) = field 
} 

scala> val clock = new Clock 
clock: Clock = [email protected] 

scala> clock.foo 
res37: String = foo 

scala> clock.selectDynamic("foo") 
res38: String = foo 

So können Sie zum Beispiel die Verwendung Musterabgleich in selectDynamic das Feld auszuwählen.

Verwandte Themen