Dela via


Nyheter i F# 4.7

F# 4.7 lägger till flera förbättringar av F#-språket.

Kom igång

F# 4.7 finns i alla .NET Core-distributioner och Visual Studio-verktyg. Kom igång med F# om du vill veta mer.

Språkversion

F# 4.7-kompilatorn introducerar möjligheten att ange din effektiva språkversion via en egenskap i projektfilen:

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

Du kan ange värdena 4.6, , 4.7latestoch preview. Standardvärdet är latest.

Om du anger det till previewaktiverar kompilatorn alla F#-förhandsversionsfunktioner som implementeras i kompilatorn.

Implicita avkastningar

Du behöver inte längre använda nyckelordet yield i matriser, listor, sekvenser eller beräkningsuttryck där typen kan härledas. I följande exempel krävde båda uttrycken instruktionen yield för varje post före F# 4.7:

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

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

Om du introducerar ett enda yield nyckelord måste alla andra objekt också ha yield tillämpats på det.

Implicita avkastningar aktiveras inte när de används i ett uttryck som också använder yield! för att platta ut en sekvens. Du måste fortsätta att använda yield idag i dessa fall.

Jokerteckenidentifierare

I F#-kod som involverar klasser måste självidentifieraren alltid vara explicit i medlemsdeklarationer. Men i fall där självidentifieraren aldrig används har det traditionellt varit konvention att använda ett dubbelt understreck för att indikera namnlösa självidentifierare. Nu kan du använda ett enda understreck:

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

Detta gäller även för for loopar:

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

Indragsavslappningar

Före F# 4.7 krävde indragskraven för primära konstruktor- och statiska medlemsargument överdriven indrag. De kräver nu bara ett enda indragsomfång:

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