2016-06-07 10 views
2

Ich schreibe einen Parser-Generator, der Scala-Fallklassen erstellt. Nehmen Sie dieses Beispiel:Wie erhalten Sie implicits über Scala Reflexion?

case class Foo(
    name : String, 
    age : Int 
)(implicit other:Int){} 

Wenn ich eine Foo Instanz mein Parser-Generator Wissen aller drei Mitglieder hat materialisieren wollen, einschließlich der impliziten ‚anderen‘. Ich habe die Daten, um den Namen & Alter zu füllen.

Wie kann ich mit der Scala-Reflektion die "implizite Umgebung" untersuchen, wenn das Objekt erstellt wird, um einen geeigneten Wert für "andere" zu finden?

+0

Sie können implizite Werte "nicht-implizit" angeben, zB: 'Foo (" hi ", 1) (100)' –

+0

Ich brauche zur Laufzeit Reflektion zur Erstellung klassenähnlicher Parser. Ihr Beispiel ist die Kompilierzeit. – Greg

Antwort

3

Sie können nicht: die verfügbaren implits hängen von Dingen wie Importe, lokale Variablen, etc. ab, die zur Laufzeit überhaupt nicht verfügbar sind. Wenn Sie mit einem Makro kommen können, gibt es die c.inferImplicitValue Methode. Einige Beispiele finden Sie unter Scala macro - Infer implicit value using `c.prefix` oder https://groups.google.com/forum/#!topic/scala-language/rqNZMBuJLtE. Wenn Sie jedoch Hilfe bei dieser Route benötigen, rate ich Ihnen, eine separate Frage zu stellen.

Verwandte Themen