Мне нужна функция наподобие Seq.head
, но возвращающая None
вместо того, чтобы генерировать исключение, когда последовательность пуста, т. е. seq<'T> -> 'T option
.
Есть миллион способов сделать это. Вот несколько:
let items = Seq.init 10 id
let a = Seq.tryFind (fun _ -> true) items
let b = Seq.tryPick Some items
let c = if Seq.isEmpty items then None else Some (Seq.head items)
let d =
use e = items.GetEnumerator()
if e.MoveNext() then Some e.Current
else None
Я использую b
. Два вопроса:
- Есть ли особенно идиоматический способ сделать это?
- Поскольку встроенной функции
Seq.tryHead
нет, означает ли это, что в этом нет необходимости, что это редкость или лучше реализовать без функции?
ОБНОВИТЬ
tryHead
has been added to the standard library in F# 4.0.