作者:爱这奋斗 | 来源:互联网 | 2023-05-26 05:51
我正在尝试定义以下函数(在Seq模块名称中共享空间).
module Seq =
let scale value sequence =
sequence
|> Seq.map (fun v -> v * value)
然而,类型推断强加元素和值是类型int
.我希望这个方法可以处理整数(8位,16位等),浮点数(单和双)等.
为什么类型推断会跳转到int
,以及如何使此函数更通用?
1> Tomas Petric..:
对于正常的函数声明,F#不会让你编写一个数字类型的泛型函数(.NET中的泛型约束不能表达诸如"has*operator"之类的约束)
但是,如果将其标记为F#,将允许您编写通用数值函数inline
.在这种情况下,它会在您调用函数时内联函数并将代码专门化为特定类型(类型系统将使用静态成员约束来表达需求).
let inline scale value sequence =
sequence
|> Seq.map (fun v -> v * value)
您可以在我前一段时间写的博客文章中找到更多信息.