我将基于OCaml中,以F#几个模块。 我的代码转换,并在F#运行时,在F#最终功能然而结果是不一样的OCaml中的最终函数的结果。 所以,很显然我必须按照函数调用来找出哪些函数返回错误的结果。
OCaml有追踪的功能,即输入和输出一个不错的顶级指令#trace 。
找遍了F#的调试和跟踪的方法和我得到的最接近的是仪器使用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我搜索时错过了吗?
如果你是肯定的答案是否定的,这就是我所需要的。 我知道人们在简短的回答皱眉,但是这是我所需要的,如果答案是否定的。
编辑
对于更复杂的方法,其中捕获所述结果将演变大量修改的代码
原版的
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
编辑
PostSharp不支持F#。 请参阅: 使用PostSharp与F# -需要的文档与工作示例