14

私は今日Seq.firstを使おうとしていましたが、コンパイラーはSeq.tryPickを支持して非推奨になっていると言っています。関数を適用し、Someを返す最初の結果を返すことを示しています。私の場合、最初のものがSomeを返すことがわかっているので、fun x-> x!= 0と言うことができると思いますが、ここに置く適切な制約は何ですか?正しい構文は何ですか?

明確にするために、私はそれを次の形式で使用したいと思います。

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

1 に答える 1

27

重要なのは、「Seq.first」が最初の要素を返さなかったということです。むしろ、「choose」述語に一致する最初の要素を返しました。

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) 

最初の要素だけが必要な場合は、Seq.headを使用します

let r3 = a |> Seq.head 
于 2009-09-26T19:29:03.997 に答える