为什么F#调试器在于什么?

时间:2013-03-30 18:07:41

标签: visual-studio error-handling f#

任何人都可以解释为什么VS2012的调试器为同一个对象成员显示不同的值? (见图)

http://s2.uploads.ru/jlkw0.png(对不起VS的非英语界面,但我认为情况很清楚。)

这里是代码:

http://pastie.org/7186239

1 个答案:

答案 0 :(得分:8)

调试经验似乎在识别标识符的正确绑定方面做得不好。在您的示例中,这意味着名为Source的任何标识符实际上都显示this.Source的值,而不是正确对象的相应属性。请注意,您可以通过将鼠标悬停在y上并扩展成员来获得正确的值(尽管这显然不是很棒的体验)。

这个问题显得更加令人困惑:

type T() =
    member val P = 1

    member this.DoSomething() =
        let P = "test"      // set breakpoint here, hover over P
        printfn "%i" this.P // set breakpoint here, hover over P

T().DoSomething()

现在,无论你将P悬停在哪一个例子上,都会出错!