Sì, lo so che è considerato pigro dai non-Pythonistas. La ragione per cui chiedo è che la documentazione è ancora tristemente carente in molte librerie Scala (es. Scala-dbc, ma non è tutto ciò che sto guardando), e se potessi vedere gli attributi di un oggetto/classe in fase di esecuzione, potrei meno capire cosa è disponibile. Grazie.Scala ha un'introspezione capace di qualcosa di simile alla dir() di Python?
risposta
Scala non ha un'API di riflessione. L'unico modo per accedere a queste informazioni è utilizzare Java reflection API. Questo ha lo svantaggio che la struttura può cambiare come il modo in cui Scala è rappresentata nelle classi Java e le interfacce potrebbero cambiare in futuro.
scala> classOf[AnyRef].getMethods
res0: Array[java.lang.reflect.Method] = Array(public final void ...
Alcuni dati tipo specifico che è presente nel codice byte può essere raggiunto con la ScalaSigParser.
import tools.scalap.scalax.rules.scalasig._
import scala.runtime._
val scalaSig = ScalaSigParser.parse(classOf[RichDouble])
Questo è uno dei miei principali utilizzi per REPL. Digitare il nome dell'oggetto, punto, e quindi TAB e mostrerà tutti i metodi disponibili.
Non è perfetto. Per prima cosa, mostra metodi protetti, che non saranno disponibili a meno che non stiate estendendo la classe. Per un'altra cosa, non mostra metodi disponibili attraverso la conversione implicita.
E, naturalmente, gli IDE sono tutti in grado di farlo.
Si potrebbe desiderare qualcosa come il seguente che ti darebbe quello che ti serve. In questo caso, opera su una stringa, ovviamente.
val testStr = "Panda"
testStr.getClass.getMethods.foreach(println)
Funziona?
si consiglia di utilizzare this piccolo aiutante per rinforzare il REPL
- 1. Ruby ha qualcosa di simile a buildout o virtualenv?
- 2. iOS ha qualcosa di simile a RecyclerView di Android?
- 3. C'è qualcosa di simile a Thread.yield() di Java in Python? Ha senso?
- 4. Perché 'dir()' ha il nome 'dir' in python?
- 5. scala/java ha qualcosa come StringIO da python?
- 6. Lua lingua: come usare qualcosa di simile alla lista python comprensioni
- 7. JPA ha qualcosa di simile a "@GenericGenerator" di ibernazione per la generazione di ID personalizzati?
- 8. Scala ha un operatore simile a `$` di Haskell?
- 9. Thread (o qualcosa di simile) in javascript
- 10. È possibile implementare qualcosa di simile a @BeanProperty di Scala con macro?
- 11. Qualcosa di simile a Hibernate in PHP?
- 12. Ruby ha qualcosa come la comprensione delle liste di Python?
- 13. Python dir() equivalente in JavaScript?
- 14. C'è qualcosa di simile ai decoratori di funzioni Python nel linguaggio di programmazione F #?
- 15. Cosa significa la funzione dir() di Python?
- 16. Hive ha qualcosa di equivalente a DUAL?
- 17. Qual è l'equivalente di Groovy per dir() di Python?
- 18. C'è qualcosa di simile per emacs come NERDtree di VIMS
- 19. C'è un hook di Subversion Checkout o qualcosa di simile?
- 20. Vantaggi di Erlang su (qualcosa di simile) node.js?
- 21. Qualcosa di simile expand.grid su una lista di liste
- 22. C'è qualcosa di simile al CSS incorporato in XSL-FO?
- 23. NetworkStream, c'è qualcosa di simile a DataReceived per SerialPort? (C#)
- 24. Ripetizione di una stringa in Java - simile alla semplicità di una riga di Python
- 25. Qualche programma utilizzato .DS_Store (o qualcosa di simile) per qualcosa di utile?
- 26. Lua non ha qualcosa di paragonabile a method_missing di Ruby?
- 27. Googles guava ha un metodo intero tryparse java o qualcosa di simile?
- 28. Esiste qualcosa di simile a gsub in javascript?
- 29. Esiste qualcosa di simile a "rake routes" in django?
- 30. Qualcosa di simile all'istruzione SQL in .NET framework?
Sì, questa è la mia soluzione iniziale, ma in IntelliJ IDEA 9 (usando Scala 2.7.7) non ottengo abbastanza informazioni dalla Scala. classe dbc, in particolare, quando si costruisce una query (per la quale ho davvero bisogno di documentazione più dell'introspezione, ma questa era l'ultima risorsa). – JohnMetta