Diciamo un ho una classe:Come accedere ai valori dei parametri predefiniti tramite Scala reflection?
case class Foo(id: Int, name: String, note: Option[String] = None)
Sia il costruttore e il metodo applica in oggetto associato generato automaticamente prende tre parametri. Una volta osservato attraverso la riflessione, il terzo parametro (nota) è in posizione:
p.isParamWithDefault = true
Inoltre, mediante ispezione posso trovare il metodo che produce il valore nell'oggetto compagna:
method <init>$default$3
e
method apply$default$3
che hanno entrambi anche:
m.isParamWithDefault = true
Tuttavia, non riesco a trovare nulla sul TermSymbol per il parametro notes che in realtà punta ai metodi giusti per ottenere il valore predefinito né alcunché sui MethodSymbols sopra riportati che puntano al TermSymbol per il parametro.
C'è un modo semplice per collegare TermSymbol per il parametro con il metodo che genera il suo valore predefinito? O devo fare qualcosa di kludgey come ispezionare i nomi dei metodi sull'oggetto compagno?
Sono interessato a questo sia per l'esempio di costruttore case case che ho qui e per i metodi regolari.
Ci sono gradi di kludge. codice di esempio in [1] [1] [questa risposta.]: Http://stackoverflow.com/a/13813000/1296806 –
Sì, ho codificato qualcosa di simile a questo. Ma si basa sullo schema di mangling di Scala che * dovrebbe * essere trattato come un dettaglio di implementazione. In effetti c'è un thread su di esso in corso in questo momento: https://groups.google.com/d/topic/scala-internals/aE81MVdIhCk/discussion –
Sì, anche seguendo il thread; il mio interesse derivava da un PR che aveva bisogno di passare da argomenti di default al metodo, ecc., è disordinato per via interiore, figuriamoci esternamente. Ma come notato, la forma del mangano è spec'd. –