共用方式為


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.64.7latest、和 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