F# 4.7 的新功能
F# 4.7 新增了 F# 語言的多項改善功能。
開始使用
F# 4.7 適用於所有 .NET Core 散發套件和 Visual Studio 工具。 開始使用 F# 以深入了解。
Language version (語言版本)
F# 4.7 編譯器引進了透過專案檔中的屬性來設定有效語言版本的能力:
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
您可將其設為 4.6
、4.7
、latest
、和 preview
值。 預設值為 latest
。
如果您將其設定為 preview
,編譯器將會啟動所有在編譯器中實作的 F# 預覽功能。
隱含暫止
您無需再將 yield
關鍵字套用於陣列、清單、序列或可推斷型別的計算運算式中。 在下列範例中,兩個運算式都要求 F# 4.7 之前每個輸入的 yield
陳述式:
let s = seq { 1; 2; 3; 4; 5 }
let daysOfWeek includeWeekend =
[
"Monday"
"Tuesday"
"Wednesday"
"Thursday"
"Friday"
if includeWeekend then
"Saturday"
"Sunday"
]
如果您引進單一的 yield
關鍵字,其他每個項目也必須套用 yield
。
若嘗試於同樣利用 yield!
來執行壓平序列等動作的運算式中使用隱含暫止,則這個功能不會啟動。 在這些情況下,目前您必須繼續使用 yield
。
萬用字元識別碼
在涉及類別的 F# 程式碼中,必須一律在成員宣告中明確揭露自我識別碼。 然而,在從未使用過自我識別碼的情況下,傳統上習慣使用雙底線來表示不具名的自我識別碼。 現在您可以使用單底線:
type C() =
member _.M() = ()
這也適用於 for
迴圈:
for _ in 1..10 do printfn "Hello!"
縮排寬鬆
在 F# 4.7 之前,主要建構函式和靜態成員引數的縮排需求要求過多縮排。 如今它們只要求單一縮排範圍:
type OffsideCheck(a:int,
b:int, c:int,
d:int) = class end
type C() =
static member M(a:int,
b:int, c:int,
d:int) = 1