【发布时间】:2015-06-02 23:50:44
【问题描述】:
给定TimeSpan 值的列表,我想得到TimeSpan 的平均值。如果我可以这样写就很优雅了:
let durations = [TimeSpan.FromSeconds 4.; TimeSpan.FromSeconds 2.]
let avg = durations |> List.average
但是,编译器抱怨这个:
“TimeSpan”类型不支持“DivideByInt”运算符
这很合理,因为TimeSpan 确实没有定义DivideByInt。
为了解决这个问题,我尝试像这样扩展TimeSpan(在使用List.average之前):
type TimeSpan with
static member DivideByInt (ts : TimeSpan) (i : int) =
(float ts.Ticks) / (float i) |> int64 |> TimeSpan.FromTicks
虽然直接使用此实现似乎可以正常工作,但不幸的是,使用List.average 时编译器似乎并不满意。
虽然我非常清楚我可以使用 List.averageBy,或者只是编写一个自定义函数来计算 TimeSpan 值列表的平均值,但我认为如果可以编写 @987654334 会很优雅@。
有没有办法启用该语法?
【问题讨论】:
-
TimeSpan 有静态成员零吗? msdn.microsoft.com/en-us/library/…
-
您可以使用定义了静态成员
DivideByInt、(+)和Zero的包装器。重复此question...
标签: f#