在調試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. 如何調用函數,在窗口1從窗口2
- 3. 如何從VS2010調用matlab函數
- 4. 如何從C#/ F#調用IronPython函數?
- 5. 立即調用函數和jQuery立即調用函數之間的區別
- 6. 立即在CoffeeScript中調用函數
- 7. jQuery立即在CoffeeScript中調用函數?
- 8. 如何在交互式窗口中使用f#函數?
- 9. 從子窗口調用父窗口中的函數
- 10. 如何從子窗口調用JavaScript函數到主窗口中的iframe?
- 11. 先進的Visual Studio功夫測試 - 在調試過程中從立即窗口調用函數
- 12. 如何從Visual Studio調試器和立即窗口中運行Windbg/dbeng.dll命令?
- 13. 將窗口和undefined傳遞給立即調用的匿名函數。爲什麼?
- 14. IntelliJ的「立即」窗口
- 15. 如何從iframe調用主窗口中的函數?
- 16. 從另一個窗口調用函數
- 17. 使用Javascript從彈出窗口調用父窗口函數
- 18. 從父窗口調用子窗口函數javascript
- 19. 如何從彈出窗口javascript調用父窗口jquery函數的變量?
- 20. 如何從Tkinter窗口立即停止Python進程?
- 21. 傳遞函數在JavaScript函數調用第二函數立即
- 22. 在父窗口中調用iframe函數
- 23. 在子窗口中調用JavaScript函數
- 24. 關閉「步入:..」調試時在VisualStudio中立即顯示窗口
- 25. 如何在平移手勢後立即調用某個函數?
- 26. 在窗口調用中調用相同的函數並調整窗口大小
- 27. 立即使用構造函數/ Universal Analytics調用函數
- 28. 關閉子窗口後在父窗口中調用函數
- 29. 父窗口中調用子窗口函數的錯誤
- 30. VB 6.0:如何在立即窗口中看到XML變量
我在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