Az F# 4.7 újdonságai

Az F# 4.7 több fejlesztést is tartalmaz az F# nyelvhez.

Első lépések

Az F# 4.7 minden .NET Core-disztribúcióban és Visual Studio-eszközben elérhető. Ismerkedés az F# -tal további információért.

Nyelvi verzió

Az F# 4.7 fordító lehetővé teszi a hatékony nyelvi verzió beállítását a projektfájl egyik tulajdonságán keresztül:

<PropertyGroup>
    <LangVersion>preview</LangVersion>
</PropertyGroup>

Beállíthatja a következő értékeket 4.6: , 4.7, latestés preview. Az alapértelmezett érték latest.

Ha ezt previewállítja be, a fordító aktiválja a fordítóban implementált összes F# előzetes verziójú funkciót.

Implicit hozamok

Többé nem kell alkalmaznia a kulcsszót tömbökben yield , listákban, sorozatokban vagy számítási kifejezésekben, ahol a típus kikövetkeztethető. Az alábbi példában mindkét kifejezés az F# 4.7 előtti összes bejegyzéshez megkövetelte az yield utasítást:

let s = seq { 1; 2; 3; 4; 5 }

let daysOfWeek includeWeekend =
    [
        "Monday"
        "Tuesday"
        "Wednesday"
        "Thursday"
        "Friday"
        if includeWeekend then
            "Saturday"
            "Sunday"
    ]

Ha egyetlen yield kulcsszót vezet be, minden más elemnek is alkalmaznia kell yield rá.

Az implicit hozamok nem aktiválódnak, ha olyan kifejezésben használják, amely egy sorozat összesimításához is használható yield! . Ezekben az esetekben továbbra is használnia yield kell a mai napot.

Helyettesítő karakterek azonosítói

Az osztályokat tartalmazó F#-kódban az önazonosítónak mindig explicitnek kell lennie a tagdeklarációkban. Azokban az esetekben azonban, amikor az önazonosítót soha nem használják, hagyományosan szokás kettős aláhúzást használni a névtelen önazonosítók jelzésére. Mostantól egyetlen aláhúzásjelet is használhat:

type C() =
    member _.M() = ()

Ez a hurkokra for is vonatkozik:

for _ in 1..10 do printfn "Hello!"

Behúzási lazítások

Az F# 4.7 előtt az elsődleges konstruktor és a statikus tagargumentumok behúzási követelményei túlzott behúzást igényelnek. Most már csak egyetlen behúzási hatókört igényelnek:

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