2012-11-12 20 views
16

Dopo il passaggio a Scala 2.10 ricevo tonnellate di avvertimenti:Che cosa deve essere abilitato "l'accesso riflettente del metodo membro tipo strutturale ..." significa avvertimento in Scala?

accesso riflettente del metodo di membro di tipo strutturale ... dovrebbe essere attivata facendo i language.reflectiveCalls valore implicito visibili

Cosa lo fa significare?

+2

Penso che sia un risultato di questo SIP https://docs.google.com/document/d/1nlkvpoIRkx7at1qJEZafJwthZ3GeIklTFhqmXMvTX9Q/edit – Noah

risposta

16

L'avviso indica in realtà dove cercare nella documentazione per una spiegazione:

Test.scala:9: warning: reflective access of structural type member method y should be enabled 
by making the implicit value language.reflectiveCalls visible. 
This can be achieved by adding the import clause 'import scala.language.reflectiveCalls' 
or by setting the compiler option -language:reflectiveCalls. 
See the Scala docs for value scala.language.reflectiveCalls for a discussion 
why the feature should be explicitly enabled. 

Referenced Scaladoc entry (assicuratevi di fare clic sul |> freccia a sinistra per espandere la voce documentazione).

+0

Il mistero per me è perché il mio codice ha bisogno di questo, è abbastanza normale. – Ivan

+3

Sarebbe utile se potessi pubblicare alcuni frammenti del tuo codice –

+0

Sarebbe troppo da postare (cercherò comunque di isolare la causa in un pezzo di codice modello). Penso che il codice che causa questo sia una semplice implementazione del pattern "pimp my library". Mi chiedo solo se si possa fare senza "accesso riflettente" ... – Ivan

0

da Scala Documenti:

Perché controllarlo? Reflection non è disponibile su tutte le piattaforme. Strumenti popolari come ProGuard hanno problemi ad affrontarlo. Anche laddove è disponibile la riflessione, la spedizione riflettente può portare a sorprendenti deterioramenti delle prestazioni.

Pensa a questo codice che utilizza una sottoclasse anonima:

class Student(val id:Int) 
val specialStudent = new Student(0) { 
    val greeting = "I am a special student with id " + id // Warning: id can be obfuscated 
} 

Link to Scala Docs

Problemi correlati