在调试F#应用程序时,我希望能够从VS2010立即窗口调用F#方法,但似乎不起作用。问题似乎是F#方法实际上是FSharpFunc对象。我尝试使用“Invoke”方法,但交互式窗口无法识别它。如何从VS2010立即窗口中调用F#函数
回答
Visual Studio的F#集成不支持立即窗口(或手表)中的F#表达式,所以唯一的选择是编写与F#使用的编译后表示相对应的C#代码。我试过这样做,并且遇到了与您所描述的相同的问题 - Invoke
方法似乎存在(在Reflector中),但Visual Studio不想直接调用它。我试着用下面的例子:
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) |
这似乎也可以调用使用从C#4.0 dynamic
通常Invoke
法(证明该方法实际上是存在的!):
((dynamic)f).Invoke(1, 2)
只有当您添加对Microsoft.CSharp.dll
的引用(并且使用代码中某处定义的某种类型 - 例如作为注释 - 以使其被加载)时,它才有效。
好的,这有效! 我试过静态InvokeFast,但我没有意识到我需要强制加载Microsoft.CSharp。使用动态是非常聪明的;) – 2010-07-23 21:10:32
只是澄清 - “InvokeFast”方法应该没有'Microsoft.CSharp.dll'(但可能需要做的事情,以便立即窗口加载'FSharp.Core.dll')。 C#库仅用于'dynamic'。 – 2010-07-23 21:29:32
- 1. 多线程从立即窗口调试
- 2. VS2010调试器:对象检查和立即窗口问题
- 3. 立即窗口
- 4. 从f调用函数f
- 5. javascript立即调用函数
- 6. 立即函数调用
- 7. 如何调用函数,在窗口1从窗口2
- 8. 如何从VS2010调用matlab函数
- 9. 如何从C#/ F#调用IronPython函数?
- 10. 立即调用函数和jQuery立即调用函数之间的区别
- 11. 立即在CoffeeScript中调用函数
- 12. jQuery立即在CoffeeScript中调用函数?
- 13. 如何在交互式窗口中使用f#函数?
- 14. 如何立即调用javascript函数从VB代码
- 15. 从子窗口调用父窗口中的函数
- 16. 从C调用F#函数#
- 17. 如何从子窗口调用JavaScript函数到主窗口中的iframe?
- 18. 先进的Visual Studio功夫测试 - 在调试过程中从立即窗口调用函数
- 19. 如何从Visual Studio调试器和立即窗口中运行Windbg/dbeng.dll命令?
- 20. IntelliJ的“立即”窗口
- 21. WinAPI窗口立即关闭
- 22. 将窗口和undefined传递给立即调用的匿名函数。为什么?
- 23. 如何从iframe调用主窗口中的函数?
- 24. 从另一个窗口调用函数
- 25. 使用Javascript从弹出窗口调用父窗口函数
- 26. 子窗口如何在父窗口调用一个函数?
- 27. 调用功能,而在VC++(立即窗口)调试模式
- 28. 从父窗口调用子窗口函数javascript
- 29. 试图在window.open后从父窗口调用子窗口函数
- 30. 从子窗口调用父窗口函数
我在MS Connect的几天前提出了一个有关此建议:https://connect.microsoft.com/VisualStudio/feedback/details/574242/f-debugger-support – 2010-07-24 01:35:26
这似乎只是一个问题,如果你有一个参数的函数。我可以直接从立即窗口调用带有多个(curried)参数的函数,语法与C#相同# – 2010-07-26 18:13:55