Да, я знаю, что он считал ленивым не-питонисты. Причина, по которой я спрашиваю, заключается в том, что документация по-прежнему крайне не хватает во многих библиотеках Scala (например, Scala -dbc, но это не все, что я ищу), и если бы я мог видеть атрибуты объекта/класса во время выполнения, Я мог бы хотя бы выяснить, что доступно. Спасибо.
У Scala есть интроспекция, способная что-то подобное Python dir()?
Ответ 1
Scala не имеет API отражения. Единственный способ получить доступ к этой информации - использовать API отражения Java. Это имеет тот недостаток, что структура может измениться, поскольку способ Scala представлен в Java-классах, и интерфейсы могут измениться в будущем.
scala> classOf[AnyRef].getMethods
res0: Array[java.lang.reflect.Method] = Array(public final void ...
Некоторая информация о конкретном типе, которая присутствует в байтовом коде, может быть доступна с помощью ScalaSigParser.
import tools.scalap.scalax.rules.scalasig._
import scala.runtime._
val scalaSig = ScalaSigParser.parse(classOf[RichDouble])
Ответ 2
Это одно из моих основных применений для REPL. Введите имя объекта, точку, а затем TAB и покажет все доступные методы.
Это не идеально. Во-первых, он показывает защищенные методы, которые не будут доступны, если вы не расширяете класс. С другой стороны, он не показывает методы, доступные через неявное преобразование.
И, конечно же, все IDE способны это сделать.
Ответ 3
Вам может понадобиться что-то вроде следующего, которое даст вам то, что вам нужно. В этом случае он работает на String, очевидно.
val testStr = "Panda"
testStr.getClass.getMethods.foreach(println)
Это работает?
Ответ 4
Возможно, вы захотите использовать этот небольшой помощник, чтобы усилить REPL