是否可以在 F# 中转发可选参数

cit*_*kid 4 f# optional-parameters

我想在 F# 中定义一个重载成员函数

member o.m1(?x: int) =
    o.m1("bugs bunny", x) // <- error, expects a straight int, but x is int option

member o.m1(s: string, ?x: int) =
    42
Run Code Online (Sandbox Code Playgroud)

但上面的代码失败了。我可以这样解决这个问题:

member o.m1(?x: int) =
    match x with
    | Some x -> o.m1("bugs bunny", x)
    | _ -> o.m1("bugs bunny")
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以避免这种切换。

bri*_*rns 6

您可以通过显式命名可选参数来完成此操作,如下所示:

    member o.m1(?x: int) =
        o.m1("bugs bunny", ?x = x)
Run Code Online (Sandbox Code Playgroud)