我试图用Seq.first今天,编译器表示,它已经赞成Seq.tryPick的被弃用。它说,它适用的功能,并返回返回部分的第一个结果。我想我只能说好玩X - > X = 0,因为我知道第一个将在我的情况下返回一些,但什么是正确的约束放到这里!?什么是正确的语法?

要澄清,我想在格式使用它:

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

解决方案

的关键是,“Seq.first”未返回的第一个元素,而是返回匹配一些“选择”谓词的第一个元素:

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 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top