2012-08-28 38 views
4

是否可以讓Visual Studio顯示操作員的工具提示?Visual Studio 2010智能感知:F#操作員提示

下圖顯示了一個函數的工具提示提示,但它不適用於操作員。

a tooltip hint for a function

運營商通常有簡單類型的規格一樣'T -> 'T -> 'T,但這樣的提示可以自定義都非常有用。

回答

7

按照Daniel的建議,我發佈了一個解決方法,我一直在爲自己使用。
解決方法只是部分有用,我仍在尋找更好的想法。

let (!><) a =() 
let z1 = op_BangGreaterLess 5 

由於運算符表達式使用編譯器生成的名稱生成函數,因此此代碼是完全有效的。有關操作員名稱的完整列表,請參見this MSDN article,「重載操作員名稱」部分。

好消息是,op_BangGreaterLess支持IntelliSense提示,它還支持IDE的「轉到定義」(F12)命令,指向原始的運算符聲明。
壞消息是,智能感知不允許快速輸入完整的操作員名稱(Ctrl + 空間),因此您必須手動鍵入整個名稱。

4

恐怕這是不可能的(甚至在Visual Studio 2012中,我也沒有得到操作員的提示)。

我想這可能會實現,但正如你所說,操作員通常有簡單的類型。在使用自定義運算符時,這些運算符應該足夠簡單,以便人們可以在不查看其類型(或關聯的XML文檔)的情況下使用它們。否則,使用命名函數可能會更好。

這就是說,如果你使用F#互動,那麼你可以很容易地用它來探索運營商類型:

> (!><);; 
val it : ('a -> unit) = <fun:[email protected]> 

如果我不能使用F#互動,我通常會定義一個簡單的虛擬符號來獲得智能感知:

let dummy() = (!><) 

請注意,我說unit參數定義一個函數,避免值限制錯誤。

+2

還有另一種解決方法:'op_BangGreaterLess'是一個全功能的同義詞,可用於IntelliSense提示。它也支持'去定義'。不幸的是,快速輸入不支持'op_ *';你必須手工輸入。 – bytebuster

+1

@bytebuster這是一個很酷的解決方法,我不知道那個。我想知道F#團隊是否知道:-) –

+1

@bytebuster:您應該將其作爲答案發布。 – Daniel