2009-12-29 2 views

답변

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는 모두 그렇게 할 수 있습니다.

+0

예를 강화하기 위해 this 작은 도우미를 사용할 수 있습니다. dbc 클래스, 특히 쿼리를 작성할 때 (실제로 내포 된 것보다 많은 문서가 필요하지만 최후의 수단이었습니다). – JohnMetta

5

다음과 같이 원하는 것을 제공 할 수 있습니다. 이 경우에는 String에서 작동합니다.

val testStr = "Panda" 
testStr.getClass.getMethods.foreach(println) 

작동합니까?

0

당신은 내 초기 솔루션, 그러나하게 IntelliJ IDEA 9 (스칼라 2.7.7를 사용)에 나는 스칼라에서 충분한 정보를 얻을하지 마십시오 REPL