2009-12-29 14 views
17

Evet, Pythonistas olmayanlar tarafından tembel kabul edildiğini biliyorum. Sormamın nedeni, birçok Scala kütüphanesinde (örn. Scala-dbc gibi) belgelerin hala eksik olmasından kaynaklanıyor ve eğer bir nesnenin/sınıfın çalışma zamanındaki özelliklerini görebiliyor olsaydım; En uygun olanı bulmak. Teşekkürler.Scala'nın Python'un dir()?

cevap

10

Scala yansıma API'sine sahip değildir. Bu bilgiye erişmenin tek yolu Java reflection API'u kullanmaktır. Bu, Scala'nın Java sınıflarında temsil edildiği ve arayüzlerin gelecekte değişebileceği için yapının değişebileceği dezavantajına sahiptir. bayt kodu mevcut

scala> classOf[AnyRef].getMethods 
res0: Array[java.lang.reflect.Method] = Array(public final void ... 

bazı özel bir tür bilgi ScalaSigParser ile ulaşılabilir. Repl için benim ana kullanımlarından biri

import tools.scalap.scalax.rules.scalasig._ 
import scala.runtime._ 

val scalaSig = ScalaSigParser.parse(classOf[RichDouble]) 
10

. Nesnenin adını, noktasını ve ardından SEKME yazın ve mevcut tüm yöntemleri gösterecektir.

Mükemmel değil. Bir şey için, sınıfı genişletmediğiniz sürece mevcut olmayacak korunan yöntemleri gösterir. Başka bir şey için, örtük dönüştürme yoluyla kullanılabilir yöntemleri göstermez.

Ve elbette, IDE'lerin hepsi bunu yapabilir.

+0

Evet artırma this küçük bir yardımcı kullanmak isteyebilirsiniz. dbc sınıfı, özellikle, bir sorgu oluştururken (bunun için gerçekten iç gözlemden çok belgelere ihtiyacım var, ancak bu son çare oldu). – JohnMetta

5

İhtiyacınız olanı veren aşağıdaki gibi bir şey isteyebilirsiniz. Bu durumda, açıkça bir String üzerinde çalışır.

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

Bu işe yarıyor mu?

0

Sen benim ilk çözüm, ama Intellij IDEA 9 (Scala 2.7.7 kullanarak) I scala yeterli bilgi alamadım, REPL

İlgili konular