代码之家  ›  专栏  ›  技术社区  ›  Maurice Flanagan

如何从VS2010即时窗口调用F#函数

  •  7
  • Maurice Flanagan  · 技术社区  · 14 年前

    在调试F#应用程序时,我希望能够从VS2010立即窗口调用F#方法,但它似乎不起作用。问题似乎是F#方法实际上是FSharpFunc对象。我尝试使用“Invoke”方法,但交互式窗口无法识别它。

    1 回复  |  直到 14 年前
        1
  •  10
  •   Tomas Petricek    14 年前

    Visual Studio的F#集成不支持立即窗口(或监视)中的F#表达式,因此唯一的选择是编写与F#使用的编译表示相对应的C#代码。我试过这么做,但我遇到了和你描述的一样的问题-问题 Invoke 方法似乎存在(在Reflector中),但VisualStudio不想直接调用它。我使用以下示例进行了尝试:

    let foo f = 
      let n = f 1 2 // Breakpoint here
      n + 1
    

    但是,还有其他方法可以调用该函数。在本例中,F编译器生成的实际代码是对 InvokeFast 方法。如果在“立即”窗口中键入以下内容,则该窗口将正常工作:

    Microsoft.FSharp.Core.FSharpFunc<int, int>.InvokeFast<int>(f, 1, 2)  |
    

    援引 方法使用 dynamic 从C#4.0(证明方法确实存在!):

    ((dynamic)f).Invoke(1, 2)
    

    只有在添加对 Microsoft.CSharp.dll (并在代码的某个地方使用程序集中定义的某种类型(例如,作为注释),以便加载它)。