값 옵션

F#의 값 옵션 유형은 다음 두 가지 상황이 유지되는 경우에 사용됩니다.

  1. 시나리오는 F# 옵션에 적합합니다.
  2. 구조체를 사용하면 시나리오에서 성능 이점이 제공됩니다.

모든 성능에 민감한 시나리오가 구조체를 사용하여 "해결"되는 것은 아닙니다. 참조 형식 대신 사용할 때 추가 복사 비용을 고려해야 합니다. 그러나 대용량 F# 프로그램은 일반적으로 핫 경로를 통해 흐르는 많은 선택적 형식을 인스턴스화하며, 이러한 경우 구조체는 프로그램의 수명 동안 전반적인 성능을 향상할 수 있습니다.

정의

값 옵션은 참조 옵션 형식과 유사한 구조체 구분 공용 구조 체로 정의됩니다. 해당 정의는 다음과 같이 생각할 수 있습니다.

[<StructuralEquality; StructuralComparison>]
[<Struct>]
type ValueOption<'T> =
    | ValueNone
    | ValueSome of 'T

값 옵션은 구조적 같음 및 비교를 준수합니다. 기본 차이점은 컴파일된 이름, 형식 이름 및 대/소문자 이름이 모두 값 형식임을 나타낸다는 것입니다.

값 옵션 사용

값 옵션은 옵션과 마찬가지로 사용됩니다. ValueSome 는 값이 있음을 나타내는 데 사용되며 ValueNone 값이 없을 때 사용됩니다.

let tryParseDateTime (s: string) =
    match System.DateTime.TryParse(s) with
    | (true, dt) -> ValueSome dt
    | (false, _) -> ValueNone

let possibleDateString1 = "1990-12-25"
let possibleDateString2 = "This is not a date"

let result1 = tryParseDateTime possibleDateString1
let result2 = tryParseDateTime possibleDateString2

match (result1, result2) with
| ValueSome d1, ValueSome d2 -> printfn "Both are dates!"
| ValueSome d1, ValueNone -> printfn "Only the first is a date!"
| ValueNone, ValueSome d2 -> printfn "Only the second is a date!"
| ValueNone, ValueNone -> printfn "None of them are dates!"

옵션과 마찬가지로 반환 ValueOption 되는 함수에 대한 명명 규칙은 접두사를 지정하는 것입니다try.

값 옵션 속성 및 메서드

현재 Value값 옵션에 대한 속성은 다음과 같습니다. 이 InvalidOperationException 속성이 호출될 때 값이 없으면 이 값이 발생합니다.

값 옵션 함수

FSharp.Core의 ValueOption 모듈에는 모듈과 동일한 기능이 Option 포함되어 있습니다. 이름에는 다음과 같은 defaultValueArg몇 가지 차이점이 있습니다.

val defaultValueArg : arg:'T voption -> defaultValue:'T -> 'T

이는 모듈에서 Option 처럼 defaultArg 작동하지만 대신 값 옵션에서 작동합니다.

참고 항목