2017-05-05 2 views
0

비어 있지 않은 경우 나는 모든 키와 값을 인쇄 할 KeyValuePair의 서열이 있고 목록이 비어 있지 및 변수 값이 true이면 그 후 나는 (failOnError) 실패합니다.F # KeyValuePair의 Seq을 반복하고 모든 키, 값을 인쇄하십시오. 그런 다음 failwithf 목록이

내 시도는 다음이지만 항상 1 KeyValuePair 인쇄 1 반복 후 실패합니다.

Seq.map(fun kvp -> 
       printfn "Key: %s" kvp.Key 
       printfn "Value: %s" kvp.Value 
       kvp) 
    |> fun seq -> 
     if not (Seq.isEmpty seq) && failOnError 
     then 
      failwithf "There is Errors see above messages" 

아이디어가 있으십니까?

답변

3

F #의 시퀀스는 입니다. lazy : 필요한만큼 많은 요소를 반복합니다. 일부 작업에서는 시퀀스의 모든 요소 (예 : Seq.toList)를 가져와야합니다. 그러나 Seq.map은 그 중 하나가 아닙니다. Seq.map을 수행하면 여전히 모든 요소를 ​​거치지 않은 게으른 시퀀스가 ​​있습니다. 그게 순서가 비어 있지 않은 것을 증명하는 데 걸리는 전부이기 때문에 그리고 Seq.isEmpty 요소를 통해 반복됩니다.

은 당신이 아마 원하는 것은 Seq.toList |> List.isEmptySeq.isEmpty을 교체하는 것입니다. 그렇다면 모든 요소를 ​​반복하여 끝낼 것입니다. 당신이 모든 요소를 ​​반복 오게 당신의 failOnError 값이 true 여부도 있습니다. if failOnError && not (seq |> Seq.toList |> List.isEmpty) : 당신이 키를 인쇄하고 싶어하고 거짓 에만failOnError 경우 값 경우에, 당신은 당신의 if 문장의 순서를 변경해야합니다.

+0

안녕하세요 @ 답장을 보내 주신 답변과 F # Seq에 제공된 배경에 대해 감사드립니다. 지금 문제가 발생하고 제안서가 문제를 해결합니다. :) – Diego

관련 문제