Sí, sé que es considerado flojo por los no Pythonistas. La razón por la que pregunto es por la falta de documentación en muchas bibliotecas de Scala (por ejemplo, Scala-dbc, pero eso no es todo lo que estoy viendo), y si pudiera ver los atributos de un objeto/clase en tiempo de ejecución, podría hacerlo en menos averigüe lo que está disponible. Gracias.¿Tiene Scala una introspección capaz de algo similar a dir de Python()?
Respuesta
Scala no tiene una API de reflexión. La única forma de acceder a esta información es usar el Java reflection API. Esto tiene la desventaja de que la estructura puede cambiar a medida que Scala se representa en las clases de Java y las interfaces pueden cambiar en el futuro.
scala> classOf[AnyRef].getMethods
res0: Array[java.lang.reflect.Method] = Array(public final void ...
Parte de la información tipo específico que está presente en el código de bytes se puede acceder con el ScalaSigParser.
import tools.scalap.scalax.rules.scalasig._
import scala.runtime._
val scalaSig = ScalaSigParser.parse(classOf[RichDouble])
Ese es uno de mis usos principales para REPL. Escriba el nombre del objeto, punto, y luego TAB y mostrará todos los métodos disponibles.
No es perfecto. Por un lado, muestra métodos protegidos, que no estarán disponibles a menos que amplíe la clase. Por otro lado, no muestra los métodos disponibles a través de la conversión implícita.
Y, por supuesto, los IDEs son capaces de hacerlo.
Es posible que desee algo como lo siguiente que le daría lo que necesita. En este caso, opera en una cadena, obviamente.
val testStr = "Panda"
testStr.getClass.getMethods.foreach(println)
¿Eso funciona?
es posible que desee utilizar this pequeño ayudante para reforzar el REPL
- 1. ¿JUnit 3 tiene algo similar a @BeforeClass?
- 2. ¿El rubí tiene algo similar a buildout o virtualenv?
- 3. Algo similar a PHP SimpleXML en Python?
- 4. algo similar a python-DJANGO en PHP?
- 5. ¿Java tiene algo similar a las propiedades de C#?
- 6. ¿Scala/java tiene algo así como StringIO de python?
- 7. Algo similar a split()?
- 8. Python: introspección práctica
- 9. Herramienta Scala similar a Linqpad
- 10. ¿Tiene Scala un operador similar al `$` de Haskell?
- 11. Does Go tiene expresiones lambda o algo similar?
- 12. ¿Existe algo similar a gsub en javascript?
- 13. ¿Tiene jqGrid un evento afterSort o algo similar?
- 14. Algo similar a java.util en Javascript?
- 15. Funcionalidad similar a Scipy en Java/Scala?
- 16. Algo similar a jMonkey Engine para C#
- 17. ¿Hay algo similar a WebClient.DownloadString en Java?
- 18. ¿El framework .Net TraceSource/TraceListener tiene algo similar a los formateadores de log4net?
- 19. ¿Tiene Python algo así como clases internas anónimas de Java?
- 20. Introspección en Clojure
- 21. ¿Python tiene algo así como la palabra clave de C++?
- 22. ¿NSView tiene algo similar a los métodos setNeedsLayout/layoutSubviews de UIView?
- 23. ¿Tiene D algo similar a la semántica del movimiento de C++ 0x?
- 24. Ruby equivalente al "dir" de Python?
- 25. Python assert: ¿mejor introspección de fallas?
- 26. Scala: jaxb o similar?
- 27. herencia enum, o algo similar
- 28. UISwitch, algo similar para Mac?
- 29. ¿Hay algo similar a 'rutas de rake' en django?
- 30. Python "dir" equivalente en Clojure
Sí, esa es mi solución inicial, pero en IntelliJ IDEA 9 (usando Scala 2.7.7) que no reciben suficiente información de la Scala. clase dbc, específicamente, cuando construyo una consulta (para lo cual realmente necesito documentación más que una introspección, pero este fue el último recurso). – JohnMetta