【问题标题】:Is it possible to do function overloading in F#?是否可以在 F# 中进行函数重载?
【发布时间】:2009-12-20 15:35:07
【问题描述】:

类似

let f x = log(x)

以后我可以将 f 应用于矩阵、向量或浮点数。

我猜这是不可能的,因为 F# 是严格静态类型的。有什么其他模式可以解决这个问题吗?

谢谢!

【问题讨论】:

    标签: .net f# functional-programming


    【解决方案1】:

    查看我对这个问题的回答:

    Functions with generic parameter types

    简单地说:

    • 您可以重载类的成员(但不能重载 let-bound 函数)
    • 您可以使用“内联”和“帽子”类型
    • 您可以模拟 Haskell 类型的类并显式传递方法字典
    • 您可以使用从“obj”强制转换的运行时类型测试

    【讨论】:

      【解决方案2】:

      您可以对类型/类使用运算符重载:

      type Fraction = 
        { n : int; d : int; }
        static member (+) (f1 : Fraction, f2 : Fraction) =
          { n = f1.n * f2.d + f2.n * f1.d; d = f1.d * f2.d }
      

      或内联函数:

      > let inline fi a b = a+b;;
      val inline fi :
         ^a ->  ^b ->  ^c when ( ^a or  ^b) : (static member ( + ) :  ^a *  ^b ->  ^c)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 1970-01-01
        • 2021-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多