2009-12-29 12 views
17

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

10

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]) 
10

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.

+0

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

5

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?

0

es posible que desee utilizar this pequeño ayudante para reforzar el REPL

Cuestiones relacionadas