Мне нужна функция типа 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
, указывает ли это, что это не обязательно, является необычным или лучше реализовано без функции?
UPDATE
tryHead
был добавлен в стандартную библиотеку в F # 4.0.