我有一个函数来计算序列的累积和.
let cumsum<'T> = Seq.scan (+) 0 >> Seq.skip 1 >> Seq.toArray
Run Code Online (Sandbox Code Playgroud)
虽然它看起来很通用,但整数0使它成为非泛型的,因此我不能用浮点序列调用该函数.
是否有一个通用的零可以替代我的硬编码0,或者可能是一种使函数通用的不同方式.
你可以使用GenericZero原语,但你需要使你的函数内联并使它明确地成为一个函数(现在你的函数是以无点样式编写的),因为原则上不能内联值.
let inline cumsum s =
s |> Seq.scan (+) LanguagePrimitives.GenericZero |> Seq.skip 1 |> Seq.toArray
Run Code Online (Sandbox Code Playgroud)
请注意,通过删除Type参数'T,编译器会自动推断静态成员约束:
val inline cumsum :
s:seq< ^a> -> ^b []
when ( ^b or ^a) : (static member ( + ) : ^b * ^a -> ^b) and
^b : (static member get_Zero : -> ^b)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |