泛型函数的泛型零
Generic zero for generic function
我有一个函数可以计算序列的累加和。
let cumsum<'T> = Seq.scan (+) 0 >> Seq.skip 1 >> Seq.toArray
虽然它看起来很通用,但整数 0
使它变得非通用,因此我不能用浮点数序列调用该函数。
是否有一个通用零可以替代我的硬编码 0
,或者可能是一种使函数通用的不同方法。
LanguagePrimitives.GenericZero
:)
您可以使用 GenericZero primitive but you need to make your function inline and make it explicitly a function (right now your function is written in point-free style),因为原则上不能将值设为内联。
let inline cumsum s =
s |> Seq.scan (+) LanguagePrimitives.GenericZero |> Seq.skip 1 |> Seq.toArray
请注意,通过删除类型参数 'T
,静态成员约束由编译器自动推断:
val inline cumsum :
s:seq< ^a> -> ^b []
when ( ^b or ^a) : (static member ( + ) : ^b * ^a -> ^b) and
^b : (static member get_Zero : -> ^b)
我有一个函数可以计算序列的累加和。
let cumsum<'T> = Seq.scan (+) 0 >> Seq.skip 1 >> Seq.toArray
虽然它看起来很通用,但整数 0
使它变得非通用,因此我不能用浮点数序列调用该函数。
是否有一个通用零可以替代我的硬编码 0
,或者可能是一种使函数通用的不同方法。
LanguagePrimitives.GenericZero
:)
您可以使用 GenericZero primitive but you need to make your function inline and make it explicitly a function (right now your function is written in point-free style),因为原则上不能将值设为内联。
let inline cumsum s =
s |> Seq.scan (+) LanguagePrimitives.GenericZero |> Seq.skip 1 |> Seq.toArray
请注意,通过删除类型参数 'T
,静态成员约束由编译器自动推断:
val inline cumsum :
s:seq< ^a> -> ^b []
when ( ^b or ^a) : (static member ( + ) : ^b * ^a -> ^b) and
^b : (static member get_Zero : -> ^b)