我將基於OCaml的幾個模塊轉換爲F#。我將代碼轉換並在F#中運行,但F#中的最終函數的結果與OCaml中的最終函數的結果不同。所以顯然我必須按照函數調用來找出哪個函數返回了錯誤的結果。將OCaml轉換爲F#:是否有一種簡單的方法來模擬Fam中的OCaml頂層#trace
OCaml有一個很好的頂級指令用於跟蹤函數的輸入和輸出,即#trace。
我已經搜索了F#的debug和trace方法,而且我得到的最接近的方法是使用Trace.Write方法對代碼進行檢測,但每種方法都需要幾行代碼。
例如
原始
let fun001 parm001 =
parm001 * 10
儀表
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
確實F#具有相同的功能OCaml的#trace我搜索時錯過了嗎?
如果您確定答案是否定的,那就是我所需要的。我知道人們對簡答題不滿,但如果答案是否定的,那就是我所需要的。
EDIT
對於更復雜的方法,其中捕獲所述結果將演變大量修改的代碼
原始
let func001 parm001 parm002 =
match parm001 with
| pattern001 -> func002 parm002
| head :: tail ->
func003 head
func001 tail
| [] -> failwith "failed"
儀器化
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不支持F#。見:Using PostSharp with F# - Need documentation with working example
看起來很有意思。我已經修復了我的bug,x%y應該是y%x。下一次我遇到需要一個多小時才能找到的錯誤時,我會記住它。 –