Trong scala 2.9.x tôi đã sử dụng tools.nsc.Global
trực tiếp để biên dịch chuỗi nhất định vào một lớp và thực thi nó.Có cách nào để có được báo cáo thích hợp về lỗi biên dịch thời gian chạy trong scala 2.10 không?
Trong scala 2.10, nó có thể thay thế nó bằng một cái gì đó như sau:
import scala.reflect.runtime._;
val cm = universe.runtimeMirror(getClass.getClassLoader)
import scala.tools.reflect.ToolBox;
val tb = cm.mkToolBox()
tb.eval(tb.parse("class C; new C"))
Và nó hoạt động hoàn hảo. Vấn đề duy nhất là với cách tiếp cận cũ (không được chấp nhận), tôi có thể tóm tắt tất cả các lỗi biên dịch bằng cách sử dụng StoreReporter (với thông báo lỗi, số dòng) và cách tiếp cận mới chỉ ném ngoại lệ về lỗi biên dịch.
Có cách nào để sửa lại điều đó không?
Nhưng, như bạn thấy, nó cung cấp NoPosition cho tất cả các lỗi. Và nếu tôi sẽ biên dịch các đoạn mã lớn với, tôi muốn có thể báo cáo ít nhất vị trí dòng cho người dùng. – Rogach
Để tham khảo, dưới đây là cách thực hiện: https://github.com/Rogach/miltamm/blob/master/src/main/scala/BuildCompiler.scala#L8 – Rogach
Bạn có thể mở một vé về điều NoPosition này không ? –