有两种问题 - 首先,您需要指定要在列表元素之间使用的时间间隔。这将是一个TimeSpan
,但它没有静态的Zero
成员。
type TimeSpanW = { span : TimeSpan } with
static member (+) (d:DateTime, wrapper) = d + wrapper.span
static member Zero = { span = new TimeSpan(0L) }
您:
这个约束是由要求“步”类型具有静态(+)
和Zero
成员
您可以定义自己的结构,但是它支持所需的操作skip range operator要求可以这样做:
let ts = new TimeSpan(...)
let dateList = [a .. {span = ts} .. b]
编辑:下面是使用可识别联合替代语法,您可能希望:
type Span = Span of TimeSpan with
static member (+) (d:DateTime, Span wrapper) = d + wrapper
static member Zero = Span(new TimeSpan(0L))
let ts = TimeSpan.FromDays(1.0)
let dateList = [a .. Span(ts) .. b]
来源
2012-06-24 10:04:22
Lee
工程很漂亮...有没有链接解释发生了什么?为什么零是必需的?还有(+)运算符。 –
@KnowsNotMuch - 这是“跳过范围”操作符所要求的 - 我已通过链接更新了答案。 – Lee
@KnowsNotMuch - 实际发生的事情 - 步骤必须从0开始,然后增加 - 如果您查看签名,则步骤不必具有与端点相同的类型。 –