2009-12-29 31 views
17

Vâng, tôi biết nó được coi là lười biếng bởi những người không phải Pythonistas. Lý do tôi hỏi là tài liệu vẫn còn thiếu trong nhiều thư viện Scala (ví dụ Scala-dbc, nhưng đó không phải là tất cả những gì tôi đang xem), và nếu tôi có thể thấy các thuộc tính của một đối tượng/lớp trong thời gian chạy, tôi có thể ít nhất là tìm ra những gì có sẵn. Cảm ơn.Scala có introspection có khả năng tương tự như dir của Python()?

Trả lời

10

Scala không có API phản chiếu. Cách duy nhất để truy cập thông tin này là sử dụng Java reflection API. Điều này có bất lợi là cấu trúc có thể thay đổi như cách mà Scala được biểu diễn trong các lớp Java và các giao diện có thể thay đổi trong tương lai.

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

Một số thông tin loại cụ thể có trong mã byte có thể được truy cập với ScalaSigParser.

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

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

Đó là một trong những ứng dụng chính của tôi cho REPL. Nhập tên, dấu chấm của đối tượng và sau đó TAB và nó sẽ hiển thị tất cả các phương thức có sẵn.

Nó không hoàn hảo. Đối với một điều, nó cho thấy phương pháp bảo vệ, mà sẽ không có sẵn, trừ khi bạn đang mở rộng lớp. Đối với một điều khác, nó không hiển thị các phương thức có sẵn thông qua chuyển đổi ngầm định.

Và, tất nhiên, các IDE đều có khả năng thực hiện điều đó.

+0

Yeah, đó là giải pháp ban đầu của tôi, nhưng trong Intellij IDEA 9 (sử dụng Scala 2.7.7) Tôi không có đủ thông tin từ scala. lớp dbc, đặc biệt, khi xây dựng một truy vấn (mà tôi thực sự cần tài liệu hơn là nội tâm, nhưng đây là phương sách cuối cùng). – JohnMetta

5

Bạn có thể muốn một cái gì đó như sau đây sẽ cung cấp cho bạn những gì bạn cần. Trong trường hợp này, nó hoạt động trên một String, rõ ràng.

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

Điều đó có hiệu quả không?

0

Bạn có thể muốn sử dụng this chút helper để tăng cường REPL

Các vấn đề liên quan