정확히이 구성원에 대해 다른 목록을 필터링 한 후 변환하려는 DU의 특정 구성원 목록이 있습니다. 다음하지만 - - 시간에 특정 시점에서이 목록은, FOOS 포함되어 있음을 알 수구분 된 노동 조합의 특정 구성원 목록을 변환하는 표준 방법은 무엇입니까
type FooBar =
| Foo of int
| Bar of int
type FooBarWrapper = FooWrapper of FooBar
let fbs = [Foo(1); Bar(2); Foo(3); Bar(4)]
let onlyFoos x =
match x with
| Foo x -> true
| _ -> false
let foos = fbs |> List.filter onlyFoos
let fooValues (Foo x) = x + 1
let result = foos |> List.map fooValues;;
지금이 나에게 내가 바에 대한 일치 해달라고으로
let fooValues (Foo x) = x + 1
^^^^^
에 대한 불완전한 패턴 일치를 제공합니다.
있는 유일한 방법은이
let fooValues x =
match x with
| Foo x -> x + 1
| _ -> failwith "Aint No Foo!"
아아처럼 fooValues
를 다시 작성하는 것입니다! 이제 나는 여기에 막대가 없을 거라는 것을 절대적으로 알고 있지만 다시 한 번 일치해야합니다.
그래서 F #에서 이것을 구현하는 가장 좋은 방법이나 구문 상 가장 즐거운 방법은 무엇입니까?
사이드 노트 : 하스켈도 같은 문제가 있습니까?
약간 다른 방식으로 같은 질문을하는 것 같습니다. https://stackoverflow.com/questions/27910814/incomplete-pattern-match-on-parameters의 사본으로 읽습니다. 나는 거기에 솔루션을 적용한 것 같아요. –
:-) - 여전히 F #에서 새롭고 그 주위에있는 길을 찾고 있습니다. 그리고 언제나처럼 - 멋진 기능이 있으며 다른 기능을 수확하고 싶다면 함께 살아야하는 "단점"이 있습니다. – robkuz
F #에서 가르쳐 준 기능 중 하나는 기능 과부하 및 카레 결합이 어렵다는 것입니다. – robkuz