Delen via


Nieuw in F# 4.7

F# 4.7 voegt meerdere verbeteringen toe aan de F#-taal.

Aan de slag

F# 4.7 is beschikbaar in alle .NET Core-distributies en Visual Studio-hulpprogramma's. Ga aan de slag met F# voor meer informatie.

Taalversie

De F# 4.7-compiler introduceert de mogelijkheid om uw effectieve taalversie in te stellen via een eigenschap in uw projectbestand:

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

U kunt deze instellen op de waarden4.6, 4.7, en latestpreview. De standaardwaarde is latest.

Als u deze previewoptie instelt, activeert uw compiler alle F#-preview-functies die in uw compiler zijn geïmplementeerd.

Impliciete opbrengsten

U hoeft het yield trefwoord niet meer toe te passen in matrices, lijsten, reeksen of berekeningsexpressies waarin het type kan worden afgeleid. In het volgende voorbeeld hebben beide expressies de yield instructie vereist voor elke vermelding vóór F# 4.7:

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

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

Als u één yield trefwoord introduceert, moet elk ander item er ook op zijn yield toegepast.

Impliciete opbrengsten worden niet geactiveerd wanneer ze worden gebruikt in een expressie die ook wordt gebruikt yield! om iets te doen zoals een reeks platmaken. In deze gevallen moet u deze blijven gebruiken yield .

Jokerteken-id's

In F#-code met klassen moet de zelf-id altijd expliciet zijn in liddeclaraties. Maar in gevallen waarin de self-id nooit wordt gebruikt, is het gebruikelijk om een dubbele onderstrepingsteken te gebruiken om een naamloze zelf-id aan te geven. U kunt nu één onderstrepingsteken gebruiken:

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

Dit geldt ook voor for lussen:

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

Inspringingsontruimingen

Vóór F# 4.7 waren de inspringingsvereisten voor primaire constructor- en statische lidargumenten overmatige inspringing vereist. Ze hebben nu slechts één inspringingsbereik nodig:

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