Istnieją dwa problemy - po pierwsze musisz określić interwał, którego chcesz użyć między elementami listy. Byłby to TimeSpan
, ale nie ma statycznego elementu Zero
.
To ograniczenie jest wymagane przez skip range operator co wymaga kroku "typ mieć statyczne (+)
i Zero
członków
Można zdefiniować własną strukturę, która obsługuje wymaganych operacji Jednakże:
type TimeSpanW = { span : TimeSpan } with
static member (+) (d:DateTime, wrapper) = d + wrapper.span
static member Zero = { span = new TimeSpan(0L) }
ty może następnie:
let ts = new TimeSpan(...)
let dateList = [a .. {span = ts} .. b]
Edytuj: Oto alternatywa składnia dyskryminowane za pomocą związków, które mogą wolisz:
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]
Działa pięknie ... Czy istnieje link wyjaśniający, co się dzieje? Dlaczego wymagane jest zero? Także ten (+) operator. –
@KnowsNotMuch - Jest to wymagane przez operatora "zakresu pominięcia" - zaktualizowałem odpowiedź za pomocą linku. – Lee
@KnowsNotMuch - co się właściwie dzieje - krok musi zaczynać się od 0, a następnie zwiększać - jeśli spojrzysz na sygnaturę, krok nie musi mieć tego samego typu co punkty końcowe. –