make函数适用于所有数字类型(int,float,long)

时间:2012-04-17 13:39:12

标签: f#

这个简单的功能:

let sum a b = a + b

仅适用于int类型

如何制作它以便它也能用于漂浮和长时间?

2 个答案:

答案 0 :(得分:8)

使用inline

let inline sum a b = a + b

<强>更新

如果您对编写自己的多态数值函数感兴趣,则应同时使用inlineLanguagePrimitives模块。

这是来自线程Converting Haskell Polymorphic Cosine function to F#的多态余弦函数:

let inline cosine n (x: ^a) = 
    let one: ^a = LanguagePrimitives.GenericOne
    Seq.initInfinite(fun i -> LanguagePrimitives.DivideByInt (- x*x) ((2*i+1)*(2*i+2)))
    |> Seq.scan (*) one
    |> Seq.take n
    |> Seq.sum

答案 1 :(得分:3)

由于类型推断,您提供的示例函数仅适用于int类型;类型推断机制将自动推断int,因为它看到了添加。如果你想为float和long做同样的函数,你可以像Pad所说的那样内联,或者你可以这样做:

let sumFloat (a:float) b = a + b

let sumLong (a:int64) b = a + b

inline 是获得您正在寻找的通用“支持添加的任何类型”行为的正确机制。