Pregunta

Yo estaba tratando de usar Seq.first hoy en día, y el compilador dice que ha sido desaprobado en favor de Seq.tryPick. Se dice que se aplica una función y devuelve el primer resultado que devuelve parte. Creo que sólo puedo decir divertido x -> x = 0 ya que sé el primero volverá Algunos en mi caso, pero lo que es la restricción apropiada para poner aquí!? ¿Cuál es la sintaxis correcta?

Para aclarar, yo quiero usarlo en el formato:

let foo(x:seq<int>) =
   x.filter(fun x -> x>0)
   |> Seq.tryPick (??)
¿Fue útil?

Solución

La clave es que 'Seq.first' no volvió al primer elemento, sino que devuelve el primer elemento que coincidía con algún predicado 'elegir':

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) 

Si lo que desea es el primer elemento, utilice Seq.head

let r3 = a |> Seq.head 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top