2013-03-03 88 views
0

我注意到前一段時間的「觀察」窗口,在VS2012的Web不會在FSharp默認功能工作。例如,cos someValue不起作用,同樣沒有在那裏let _cos = coslet _cos x = cos x插入在函數的開始並被用於_cos(someValue)變通方法。錯誤類似於「當前上下文中不存在cos」或「_cos在當前範圍內無效」等。監視窗口不工作的F#

我應該改變一些設置,或者這是一個意外的錯誤嗎?當然,我可以宣佈所有需要觀察的結果,但這有點費用,並且不切實際。我能做些什麼來解決這個問題?

+2

是[這](http://stackoverflow.com/questions/3322027/how-do-i-invoke-an-f-function-from-the-vs2010-immediate-window)任何幫助嗎? – adrianbanks 2013-03-03 22:28:50

+1

經常在監視窗口中輸入C#表達式而不是F#表達式將會工作 – 2013-03-03 23:02:08

回答

7

正如referneced answer中所述,手錶和立即窗口僅支持C#,因此它們無法評估F#表達式並且不知道F#上下文(如已打開的名稱空間)。

總結將結果存儲在局部變量(編譯爲普通局部變量)中是查看結果的最佳方式。

更多細節: 在某些情況下,你可以編寫C#代碼對應於您想在F#做什麼。這可能只適用於簡單的情況,當相應的C#不太難寫,但通常可以完成。 例如打電話cos 3.14,你需要寫類似:如果你發現在F#源代碼cos功能

Microsoft.FSharp.Core.Operators.Cos(3.14) 

(它righ here, in prim-types.fsi),然後就可以看到它帶有CompiledName屬性,告訴編譯器將其編譯爲名爲Cos的方法(以遵循.NET命名準則)。它是在一個名爲Operators模塊定義(見it here),其中標註有AutoOpen這樣你就不會需要明確寫入open在F#代碼,但它實際上是編譯代碼時,F#編譯器生成的類的名稱。

+0

啊,我明白了;儘管我認爲編寫C#代碼來調試F#應用程序並沒有多大意義。這也解釋了爲什麼瘋狂的類名出現在類似disasseembly的工具中,用於本地函數。謝謝主席的回答。無論如何,是否有計劃允許F#代碼寫在「直接」或「監視」窗口上? – JMCF125 2013-03-04 18:54:44

+1

我不知道這樣做的目前的計劃是,但你肯定可以建議和投票功能上:http://visualstudio.uservoice.com/forums/121579-visual-studio/category/30935-languages- F- – 2013-03-04 21:37:44