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

标签 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

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

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

我想知道是否有可能避免这种转换。

最佳答案

您可以通过显式命名可选参数来实现,如下所示:

    member o.m1(?x: int) =
        o.m1("bugs bunny", ?x = x)

关于f# - 是否可以在 F# 中转发可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72523914/

相关文章:

c# - 如何通过反射执行带有可选参数的私有(private)静态方法?

c# - 当 C# 函数参数包含 `= null` 时,这意味着什么?

.net - 重复追加到列表直到抛出异常

recursion - 为什么这不是尾递归

c# - 为什么 F# 表达式树的生成比 C# 慢得多,它可以更快吗?

c# - 对于企业应用程序开发,F# 相对于 C# 有哪些优势?

F# Interactive - 如何让它打印对象的属性,当后者是可枚举的

c# - 使用枚举作为可选参数

c# - 动态和可选方法参数

c++ - 使用少于需要的参数调用函数