3

这个简单的功能:

let sum a b = a + b

适用于 int 类型

如何使它也适用于 float 和 long ?

4

2 回答 2

8

使用内联

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
于 2012-04-17T13:45:23.637 回答
3

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

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

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

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

于 2012-04-17T13:58:53.553 回答