在調試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