Neuerungen in F# 4,6What's new in F# 4.6

F#4,6 Fügt der F# Sprache mehrere Verbesserungen hinzu.F# 4.6 adds multiple improvements to the F# language.

Erste SchritteGet started

F#4,6 ist in allen .net Core-Distributionen und Visual Studio-Tools verfügbar.F# 4.6 is available in all .NET Core distributions and Visual Studio tooling. Beginnen Sie mit F# den ersten Schritten, um mehr zu erfahren.Get started with F# to learn more.

Anonyme DatensätzeAnonymous records

Anonyme Datensätze sind eine neue Art F# von Typ, F# der in 4,6 eingeführt wurde.Anonymous records are a new kind of F# type introduced in F# 4.6. Dabei handelt es sich um einfache Aggregate benannter Werte, die nicht vor der Verwendung deklariert werden müssen.They are simple aggregates of named values that don't need to be declared before use. Sie können Sie als Strukturen oder Verweis Typen deklarieren.You can declare them as either structs or reference types. Sie sind standardmäßig Verweis Typen.They're reference types by default.

open System

let getCircleStats radius =
    let d = radius * 2.0
    let a = Math.PI * (radius ** 2.0)
    let c = 2.0 * Math.PI * radius

    {| Diameter = d; Area = a; Circumference = c |}

let r = 2.0
let stats = getCircleStats r
printfn "Circle with radius: %f has diameter %f, area %f, and circumference %f"
    r stats.Diameter stats.Area stats.Circumference

Sie können auch als Strukturen für deklariert werden, wenn Sie Werttypen gruppieren möchten und in Leistungs relevanten Szenarios betrieben werden:They can also be declared as structs for when you want to group value types and are operating in performance-sensitive scenarios:

open System

let getCircleStats radius =
    let d = radius * 2.0
    let a = Math.PI * (radius ** 2.0)
    let c = 2.0 * Math.PI * radius

    struct {| Diameter = d; Area = a; Circumference = c |}

let r = 2.0
let stats = getCircleStats r
printfn "Circle with radius: %f has diameter %f, area %f, and circumference %f"
    r stats.Diameter stats.Area stats.Circumference

Sie sind sehr leistungsstark und können in vielen Szenarios verwendet werden.They're quite powerful and can be used in numerous scenarios. Weitere Informationen finden Sie unter Anonyme Datensätze.Learn more at Anonymous records.

Valueoption-FunktionenValueOption functions

Der in 4,5 hinzugefügte valueoption-Typ weist nun "Modul gebundene Funktions Parität" mit dem Optionstyp auf F# .The ValueOption type added in F# 4.5 now has "module-bound function parity" with the Option type. Im folgenden finden Sie einige häufig verwendete Beispiele:Some of the more commonly-used examples are as follows:

// Multiply a value option by 2 if it has  value
let xOpt = ValueSome 99
let result = xOpt |> ValueOption.map (fun v -> v * 2)

// Reverse a string if it exists
let strOpt = ValueSome "Mirror image"
let reverse (str: string) =
    match str with
    | null
    | "" -> ValueNone
    | s ->
        str.ToCharArray()
        |> Array.rev
        |> string
        |> ValueSome

let reversedString = strOpt |> ValueOption.bind reverse

Dies ermöglicht die Verwendung von valueoption in Szenarios, in denen ein Werttyp die Leistung verbessert.This allows for ValueOption to be used just like Option in scenarios where having a value type improves performance.