Tôi đang chuyển đổi một số mô-đun dựa trên OCaml thành F #. Tôi có mã được chuyển đổi và chạy trong F #, tuy nhiên kết quả của hàm cuối cùng trong F # không giống như kết quả của hàm cuối cùng trong OCaml. Vì vậy, rõ ràng là tôi phải làm theo các cuộc gọi hàm để tìm ra hàm nào trả về kết quả sai.Chuyển đổi OCaml thành F #: Có cách nào đơn giản để mô phỏng #trace cấp cao nhất OCaml trong F #
OCaml có chỉ thị cấp cao nhất để truy tìm đầu vào và đầu ra của hàm, tức là #trace.
Tôi đã tìm kiếm các phương pháp debug và trace của F # và gần nhất tôi nhận được là thiết bị mã bằng phương pháp Trace.Write nhưng phải mất vài dòng cho mỗi phương pháp.
ví dụ:
gốc
let fun001 parm001 =
parm001 * 10
instrumented
let fun001 parm001 =
// For VS 2010, this trace output will be sent to Output window.
System.Diagnostics.Trace.WriteLine("function001 <--");
System.Diagnostics.Trace.WriteLine(sprintf "%A" parm001);
let result = parm001 * 10
System.Diagnostics.Trace.WriteLine("function001 -->");
System.Diagnostics.Trace.WriteLine(sprintf "%A" result);
result
Liệu F # có chức năng tương tự như OCaml #trace rằng tôi đã bỏ lỡ khi tìm kiếm?
Nếu bạn chắc chắn câu trả lời là không, đó là tất cả những gì tôi cần. Tôi biết mọi người cau mày về câu trả lời ngắn, nhưng đó là tất cả những gì tôi cần nếu câu trả lời là không.
EDIT
Đối với các phương pháp phức tạp hơn nơi chụp kết quả sẽ phát triển thay đổi sâu rộng vào mã
gốc
let func001 parm001 parm002 =
match parm001 with
| pattern001 -> func002 parm002
| head :: tail ->
func003 head
func001 tail
| [] -> failwith "failed"
instrumented
let func001org parm001 parm002 =
match parm001 with
| pattern001 -> func002 parm002
| head :: tail ->
func003 head
func001 tail
| [] -> failwith "failed"
and fun001 parm001 parm002 =
// For VS 2010, this trace output will be sent to Output window.
System.Diagnostics.Trace.WriteLine("function001 <--");
System.Diagnostics.Trace.WriteLine(sprintf "%A, %A" parm001 parm002);
let result = func001org parm001 parm002
System.Diagnostics.Trace.WriteLine("function001 -->");
System.Diagnostics.Trace.WriteLine(sprintf "%A" result);
result
EDIT
PostSharp không hỗ trợ F #. Xem: Using PostSharp with F# - Need documentation with working example
Có vẻ thú vị. Tôi đã sửa lỗi của mình, x% y phải là y% x. Tôi sẽ ghi nhớ điều này trong lần tiếp theo khi tôi gặp phải một lỗi mất hơn một giờ để tìm. –