【问题标题】:Operator overloading / support discriminated unions in F#运算符重载/支持 F# 中的可区分联合
【发布时间】:2020-10-18 12:12:48
【问题描述】:

我有一个可区分的联合(标记值),它应该代表多项式的次数

type Degree =
    |MinusInf
    |Fin of int

所以我有一个函数可以给出多项式的次数

>deg [1;2;3;4];;
val it : Degree = Fin 3

现在,我的问题是,如何创建一个允许我添加度数的函数:

 Fin 2 + Fin 3 = Fin 5

一切顺利

【问题讨论】:

    标签: f# operator-overloading overloading discriminated-union


    【解决方案1】:

    MSDN 上有一篇相当详细的文章。简而言之,您想在 Degree 类型上定义这样的函数:

    type Degree =
        |MinusInf
        |Fin of int
        static member (+) (a: Degree, b: Degree) : Degree =
            match a, b with
            | Fin x, Fin y -> Fin (x+y)
            | _, _ -> MinusInf
    
    let x = Fin 2 + Fin 3
    

    【讨论】:

    • 谢谢你,scrwtp!很高兴您包含 MSDN 的链接。与 Java 或 Python 等语言相比,找到有关 F# 的信息要困难得多:)
    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2011-02-18
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 2012-04-25
    相关资源
    最近更新 更多