Is there conditional access operator in F# (similar to new ?. in C#)?

后端 未结 3 1428
傲寒
傲寒 2021-01-18 17:14

Now that the C# 6 is finally going to have this long-anticipated ?. operator, is there similar thing in F#? And I\'m not talking about ? operator.

相关标签:
3条回答
  • 2021-01-18 17:34

    You can lift your nullable into option first. And then you can use an option computation expression to achieve the same thing.

    0 讨论(0)
  • 2021-01-18 17:38

    In functional languages, conditional / compositional traversal, especial in nested structures is generally modelled using the notion of lenses which is explained with a succinct example in this SO thread.

    In the F# environment, there's Aether; see intro article and guide, which builds on the Lenses support developed and written about by Mauricio Scheffer in FSharpx here.

    0 讨论(0)
  • 2021-01-18 17:38

    Idiomatic F# doesn't have null values at all, so what use would it be? In F#, the most common way to model the absence of a value is to use option.

    When I need to interoperate with .NET code that may return null, I convert it to an option as soon as possible, using a function like this:

    let toOption (x : obj) =
        match x with
        | null -> None
        | _ -> Some x
    

    As soon as you have your value modelled as an option, you can compose it with e.g. Option.map, and that serves the same purpose (but better, and safer) than the proposed C# operator.

    0 讨论(0)
提交回复
热议问题