Прочитать на английском

Поделиться через


Новые возможности F# 4.6

F# 4.6 добавляет несколько улучшений на язык F#.

Начать

F# 4.6 доступен во всех дистрибутивах .NET Core и инструментах Visual Studio. Приступая к работе с F# , чтобы узнать больше.

Анонимные записи

Анонимные записи — это новый тип F#, представленный в F# 4.6. Они представляют собой простые агрегаты именованных значений, которые не нужно объявлять перед использованием. Их можно объявить как структуры или ссылочные типы. По умолчанию они ссылаются на типы.

F#
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

Они также могут быть объявлены как структуры, когда требуется группировать типы значений и работают в сценариях с учетом производительности:

F#
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

Они довольно мощны и могут использоваться в многочисленных сценариях. Дополнительные сведения см. в анонимных записях.

Функции ValueOption

Тип ValueOption, добавленный в F# 4.5, теперь имеет "четность функций, привязанных к модулю" с типом Option. Ниже приведены некоторые из наиболее распространенных примеров.

F#
// 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

Это позволяет использовать ValueOption так же, как и параметр в сценариях, когда тип значения повышает производительность.