2010-05-06 2 views

답변

12

참고 F 번호 내에서 좀 더 관용적 접근 것 아마도 LINQ 연산자를 사용하는 것보다는 Seq.tryFind 라인을 따라 뭔가를 사용하는 것이 좋습니다. 반환 이후에 대체가 아닙니다. 옵션 값.

+1

:로 사용

module Seq = let tryHead (ls:seq<'a>) : option<'a> = ls |> Seq.tryPick Some 

: 나는 서명 seq<'a> -> option<'a>와 함수 tryHead를 정의 할 값 (위험하기 때문에). 'Option.map'과 그것들을 다루는 다른 함수들을 사용할 수 있기 때문에 옵션 값을 다루는 것이 더 쉽습니다. (F # LINQ to SQL에서는 작동하지 않을 것입니다.) –

+0

그래,'Seq.tryFind (fun _ -> true)'잘 작동합니다. –

3

양자 택일로, 당신은 쉽게 자신의 firstordefault을 정의 할 수 있습니다

let firstordefault list = 
    match list with 
    | head :: tail -> head 
    | [] -> 0 // some default value 

예 : Seq 모듈이 이미 head 기능이

firstordefault exampleList;; 
val it : int = 1 
7

때문에

상호 작용하는 F #을 사용하여
let exampleList = [ 1; 2; 3 ] 

, 유형이 seq<'a> -> 'a 인 경우, F #으로, 당신은 일반적으로 사용 aviod하려고`null` -

[1; 2; 3] |> Seq.tryHead 
나는 또한 Seq.tryFind`는`사용 권 해드립니다 것이다
+2

그 이후로'tryHead' (https://github.com/Microsoft/visualfsharp/commit/b10392dc16593bf9286583e2a87217d18fa18b8a)가 F # 4.0에 추가되었습니다. –