2016-02-27 75 views
7

在F#編譯器的同一範圍內使用相同變量兩次時,不會有警告或反饋。例如如何識別重新定義的變量或陰影變量

let s = "abc" 
let s = "def" 
printfn "%A" s 

結果

def 

我見過
Is there a way to have warnings for shadowing values in F# in Visual Studio?
F# value shadowing - is it possible to disable value shadowing within the same scope

有沒有一種方法,以獲取有關陰影變量或者通過編譯器警告或視覺編輯器的反饋。如何才能做到這一點?

+1

謝謝你把這個變成一個適當的問題和答案:-)。我認爲你的(現在刪除的)回答了昨天的問題,這個問題非常有用,應該放在某個地方! –

+0

非常感謝創建該功能的人。誰是你的感謝。還要感謝傑克在前面提到的其中一個問題中提到它。 –

回答

9

首先,在同一範圍內的變量的陰影不是一個錯誤或應該被禁用的東西。由於Joel Mueller指出它是legitimate, useful, and common

MSDN

在比模塊範圍的其他範圍內的任何電平,它不是一個錯誤 重用值或函數名。如果重複使用名稱,稍後聲明爲 的名稱會影響前面聲明的名稱。


在Visual Studio擴展F# Power ToolsSyntax Coloring功能將高亮顯示當前有效變量和顯示陰影變量,爲淺灰色。例如

enter image description here

擴展可以從Visual Studio菜單安裝

工具 - >擴展和更新
一旦對話框打開
選擇Visual Studio庫
在右上角的搜索框中輸入F#電動工具
由於我已經安裝了它,因此不顯示安裝選項。

enter image description here

該功能可以從Visual Studio菜單中激活

工具 - >選項 - > F#電動工具 - >常規 - >語法着色 - >灰色顯示未使用的聲明

enter image description here

隨着選項關閉:

enter image description here

與選項上:

enter image description here

注:更改選項的源文件(S)後,必須關閉並重新打開,然後以使更改生效。Visual Studio不需要爲此重新啓動,但這樣做會產生同樣的效果。

感謝Ringil注意到我之前的無效聲明。從源代碼

注:

變灰未使用的聲明


當前未使用非公共類,方法,函數和聲明進行檢查值。當代碼沒有類型錯誤時,請注意這個 功能只有100%可靠。這個 設置在常規選項中可用。它在默認情況下被禁用 ,因爲大文件可能存在性能問題。

F# Power Tools features list

+0

我不得不重新啓動Visual Studio來獲取更改,而不是重建。 – Ringil

+2

顏色編碼比警告要好得多。當我做一些合法,有用和普通的事情時,我不想被警告。 –

+0

@Ringil在閱讀你的評論後,我測試了幾種不同的方式。正如你所指出的,重建不是一個可靠的方法。如果我只關閉正在編輯的源文件,然後再次打開,則更改生效,不需要重建。謝謝,我將編輯答案。 –