这个简单的功能:
let sum a b = a + b
仅适用于int类型
如何制作它以便它也能用于漂浮和长时间?
答案 0 :(得分:8)
使用inline:
let inline sum a b = a + b
<强>更新强>
如果您对编写自己的多态数值函数感兴趣,则应同时使用inline和LanguagePrimitives模块。
这是来自线程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 是获得您正在寻找的通用“支持添加的任何类型”行为的正确机制。