2011-12-31 25 views
16

Có cách nào trong Scala tìm và hiển thị tất cả việc sử dụng implicits trong mã của tôi hay biên dịch mà không có hàm ý được kích hoạt (vì vậy tôi nhận được lỗi biên dịch) không? Tôi hy vọng sẽ xác định những nơi mà tôi vô tình phân bổ thêm bộ nhớ trong vòng lặp bên trong.Tìm mọi sự liên quan

Trả lời

18

Bạn có thể sử dụng tùy chọn -Xprint:typer và xem cách kiểm tra vòng lặp bên trong. Các cuộc gọi ngầm sẽ xuất hiện trong mã nguồn được in. Bạn có thể cần phải đưa đầu ra vào một tệp để bạn có thể tìm kiếm các phần thú vị.

Ngoài ra các phiên bản Eclipse IDE của Scala tại http://scala-ide.org/download/nightly.html có tính năng ẩn hiển thị. Bạn phải bật tính năng này trong phần Tuỳ chọn, Scala, Implicits.

Các mũi tên đúp vào lề trái cho thấy một tiềm ẩn được sử dụng:

enter image description here

On di chuột, nó cho thấy các chi tiết:

enter image description here

IDEA scala plugin cũng có thể hiển thị chuyển đổi tiềm ẩn với gạch dưới, xem cùng một đoạn mã:

enter image description here

Nó cũng sẽ hiển thị cái nào được sử dụng bằng cách sử dụng phím tắt Ctrl-Shift-Q, nhưng tôi đã không mấy thành công với nó ...

11

Tính đến ngày hôm qua (nó chỉ là một trùng hợp ngẫu nhiên) có -Xlog- chuyển đổi ngầm.

scalac -Xlog-implicit-conversions -d /tmp /scala/trunk/src/library/scala/util/Random.scala 
/scala/trunk/src/library/scala/util/Random.scala:115: applied implicit conversion from Int to ?{val to: ?} = implicit def intWrapper(x: Int): scala.runtime.RichInt 
    for (n <- buf.length to 2 by -1) { 
       ^
Các vấn đề liên quan