2012-02-10 46 views
8

Làm thế nào tôi có thể thấy các loại được suy ra bởi trình biên dịch Scala cho biểu thức, v.v ...? Tôi có một số mã với suy luận kiểu phức tạp và chuyển đổi tiềm ẩn, và thật khó để xem những gì đang xảy ra chỉ bằng cách đọc mã.Hiển thị các kiểu suy luận của biểu thức Scala

Tôi đã thử thêm

scalacOptions in Compile += "-Xprint-types" 

trong build.sbt, nhưng điều này không có tác dụng.

Sử dụng scalac trực tiếp không phải là rất hấp dẫn bởi vì tôi có rất nhiều phụ thuộc.

Tôi sử dụng plugin Eclipse Scala và ENSIME để viết mã và SBT để tạo.

Trả lời

2

Tính năng chính xác này đã được thêm vào trong Eclipse Scala IDE 3.0!

Chọn bất kỳ phần nào của mã và nhấn Ctrl-Shift-W T (thay thế Ctrl bằng Cmd trên Mac) để xem loại được phỏng đoán.

4

Nó cần phải được

scalacOptions in Compile ++= Seq("-Xprint-types", "-Xprint:typer") 

để thay thế.

Thật không may, đầu ra không dễ đọc. :(

0

Hoist các biểu thức để một tổ chức phi địa phương def hoặc val, mà không có một loại rõ ràng -. Sau đó nó sẽ xuất hiện trong Outline view trong Eclipse, với một kiểu suy ra giao

Tuy nhiên, đây không phải là một giải pháp lý tưởng bởi vì nó đòi hỏi một số công việc, và nó không thể được sử dụng khi đệ quy được tham gia

0

Tôi đang chuẩn bị một câu hỏi về vấn đề này. vì đây không phải là câu trả lời ..).

Tôi đã thử giải pháp của Robin Green, nhưng (như bạn đã biết), nó cung cấp nhiều cách hơn so với yêu cầu.

đây đi:

Là mới đến Scala, và cơ chế loại suy ra, tôi nghĩ rằng nó thường sẽ có lợi để có thể làm điều gì đó như thế này:

@spitType s= something 
... 

Các tưởng tượng spitType sẽ giống như macro biên dịch thời gian (tương tự như #pragma warning trong C++) sẽ loại bỏ thông tin loại của biểu thức tại thời gian biên dịch.

Tôi biết tôi có thể nhận thông tin như vậy trong thời gian chạy, nhưng trong trường hợp phần còn lại của mã chưa biên dịch, thông báo biên dịch sẽ là điều hữu ích duy nhất.

Bạn có thấy khả năng như vậy hữu ích hay đơn giản là không liên quan?

+1

Heh, tìm đường này xung quanh. Tạo biến s.a. 'val xxx: Nothing' và gán với biểu thức có loại bạn muốn biết. Sẽ luôn tạo ra lỗi vì không có loại nào xuất phát từ 'Không có gì'. :) – akauppi

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