Domanda

Stavo cercando di utilizzare Seq.first oggi, e il compilatore dice che è stato deprecato in favore di Seq.tryPick. Si dice che essa si applica una funzione e restituisce il primo risultato che restituisce alcuni. Credo che posso solo dire divertimento x -> x = 0 perché so il primo tornerà Alcuni nel mio caso, ma qual è il vincolo corretto di mettere qui!? Qual è la sintassi corretta?

Per chiarire, io voglio usare nel formato:

let foo(x:seq<int>) =
   x.filter(fun x -> x>0)
   |> Seq.tryPick (??)
È stato utile?

Soluzione

La chiave è che 'Seq.first' non ha restituito il primo elemento, piuttosto restituito il primo elemento che ha trovato un certo predicato 'scegliere':

let a = [1;2;3]
// two ways to select the first even number (old name, new name)
let r1 = a |> Seq.first (fun x -> if x%2=0 then Some(x) else None) 
let r2 = a |> Seq.tryPick (fun x -> if x%2=0 then Some(x) else None) 

Se si desidera solo il primo elemento, utilizzare Seq.head

let r3 = a |> Seq.head 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top