Is there conditional access operator in F# (simila

2020-04-05 08:05发布

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.

标签: f#
3条回答
仙女界的扛把子
2楼-- · 2020-04-05 08:54

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.

查看更多
家丑人穷心不美
3楼-- · 2020-04-05 08:55

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

查看更多
在下西门庆
4楼-- · 2020-04-05 09:05

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.

查看更多
登录 后发表回答