我正在尝试定义以下函数(在Seq模块名称中共享空间)。
module Seq =
let scale value sequence =
sequence
|> Seq.map (fun v -> v * value)
但是,类型推断强加了元素,值为int
类型。我希望这个方法能够处理整数(8位,16位等),浮点数(单次和双次)等。
为什么类型推断会跳转到int
,如何让这个函数更通用?
答案 0 :(得分:5)
对于正常的函数声明,F#不会让你编写一个数字类型泛型的函数(.NET中的泛型约束不能表达约束,例如"有*运算符")
但是,如果将其标记为inline
,F#将允许您编写通用数值函数。在这种情况下,它会在您调用函数时内联函数并将代码专门化为特定类型(类型系统将使用静态成员约束来表达要求)。
let inline scale value sequence =
sequence
|> Seq.map (fun v -> v * value)
您可以找到更多信息in a blog post I wrote some time ago。