Frage

Ich habe versucht, Seq.first heute zu verwenden, und der Compiler sagt, es für Seq.tryPick ist veraltet. Er sagt, dass es eine Funktion gilt und gibt das erste Ergebnis, dass einige zurückgibt. Ich glaube, ich kann nur sagen, Spaß x -> x = 0, da ich weiß, dass der erste Teil in meinem Fall zurückkehren wird, aber was ist die richtige Einschränkung hier zu setzen!? Was ist die korrekte Syntax?

Um zu klären, ich mag es in dem Format verwenden:

let foo(x:seq<int>) =
   x.filter(fun x -> x>0)
   |> Seq.tryPick (??)
War es hilfreich?

Lösung

Der Schlüssel ist, dass ‚Seq.first‘ hat das erste Element nicht zurück, sondern kehrte er das erste Element, das einige ‚wählen‘ Prädikat Ergebnisse:

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) 

Wenn Sie nur das erste Element möchten, verwenden Sie Seq.head

let r3 = a |> Seq.head 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top