Я использую Rx для планирования проекта.Один из методов выглядит следующим образом:
let strike (scheduler: 'a when 'a :> IScheduler option) strikeTime source =
match strikeTime with
| StrikeOnceAt due -> strikeOnce scheduler (Choice1Of2 due) source
| StrikeOnceAfter delay -> strikeOnce scheduler (Choice2Of2 delay) source
| StrikeEvery (period, last) -> strikeEvery scheduler period last source
При тестировании я использую HistoricalScheduler
, который, конечно, происходит от IScheduler
.
let ``Repeater strikes at given rate per minute`` rpm =
let sched = new HistoricalScheduler(DateTimeOffset.Now)
let rate = rpm |> int64 |> Min |> toRate
let repeat = Repeater.StrikeEvery (rate, None)
use actual = Repeater.strike (Some sched) repeat source
Вместо приведенияsched :> IScheduler
в вызывающем коде я надеюсь использовать ограничения типа, как показано выше.
Я не уверен, следует ли представлять ограничение как ...
(scheduler: 'a option when 'a :> IScheduler)
-или-(scheduler: 'a when 'a :> IScheduler option)
Это просто предпочтение?Есть ли причина выбирать один путь перед другим?