네, 파이썬이 아닌 사람들이 게으른 것으로 생각합니다. 필자가 묻는 이유는 많은 스칼라 라이브러리 (예 : Scala-dbc)에서 문서가 여전히 부족하다는 것입니다. 런타임에 객체/클래스의 속성을 볼 수 있다면 사용할 수있는 것이 무엇인지 파악하십시오. 감사.스칼라는 파이썬의 dir()과 비슷한 인트로 스펙 션을 가지고 있습니까?
17
A
답변
10
스칼라에는 리플렉션 API가 없습니다. 이 정보에 액세스하는 유일한 방법은 Java reflection API입니다. 이것은 스칼라가 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])
10
그건 REPL의 주요 용도 중 하나입니다. 개체 이름, 점 및 Tab을 입력하면 사용 가능한 모든 방법이 표시됩니다.
완벽하지는 않습니다. 우선, 보호 된 메소드를 보여 주며, 클래스를 확장하지 않으면 사용할 수 없습니다. 또 다른 점은 암시 적 변환을 통해 사용할 수있는 메서드가 표시되지 않는다는 것입니다.
그리고 물론 IDE는 모두 그렇게 할 수 있습니다.
5
다음과 같이 원하는 것을 제공 할 수 있습니다. 이 경우에는 String에서 작동합니다.
val testStr = "Panda"
testStr.getClass.getMethods.foreach(println)
작동합니까?
0
당신은 내 초기 솔루션, 그러나하게 IntelliJ IDEA 9 (스칼라 2.7.7를 사용)에 나는 스칼라에서 충분한 정보를 얻을하지 마십시오 REPL
예를 강화하기 위해 this 작은 도우미를 사용할 수 있습니다. dbc 클래스, 특히 쿼리를 작성할 때 (실제로 내포 된 것보다 많은 문서가 필요하지만 최후의 수단이었습니다). – JohnMetta