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
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])
Đó 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 đó.
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?
Bạn có thể muốn sử dụng this chút helper để tăng cường REPL
- 1. haskell scala khả năng tương tác
- 2. Introspection trên pygtk3 có thể?
- 3. Python dir() tương đương với JavaScript?
- 4. Java/Scala (sâu) bộ sưu tập khả năng tương tác
- 5. Có scala tương đương với python của danh sách hiểu
- 6. Tại sao 'dir()' có tên 'dir' trong python?
- 7. Công cụ Scala tương tự như Linqpad
- 8. Python "dir" tương đương trong Clojure
- 9. Groovy tương đương với dir của Python() là gì?
- 10. Introspection ở Clojure
- 11. Scala có một toán tử tương tự như `$` của Haskell không?
- 12. Tương tự Scala của QtConcurrent
- 13. Bất cứ điều gì trong ổi tương tự như chức năng của Java có hiệu lực?
- 14. hashlib/md5. Khả năng tương thích với python 2.4
- 15. Java: Mảng giá trị với các phương thức/khả năng tương tự như ArrayList
- 16. Outlook khả năng tương tác
- 17. match_parent khả năng tương thích
- 18. Khả năng tương thích Meteor
- 19. PHP tương tự của mysql như chức năng
- 20. Có khả năng thực thi tập lệnh Python khi đang ở chế độ tương tác
- 21. VB.NET có chức năng tương tự như "IN" của TSQL không?
- 22. Chức năng OpenCV tương tự như "tìm kiếm" của MATLAB "
- 23. JUnit 3 có tương tự như @Ignore
- 24. Khả năng tương thích IronPython 3
- 25. Hỗ trợ của jQuery cho khả năng tương thích ngược tốt như thế nào?
- 26. Có bất kỳ biểu hiện trong python mà tương tự như ruby của || =
- 27. Khả năng tương thích ngược của Silverlight 5
- 28. Khả năng đọc mã Python
- 29. SQL Server có một tính năng tương tự như Oracle Streams Advanced Queuing không?
- 30. OpenGL Core và Khả năng tương thích
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