프로토 타입의 열거#뽑 F#?
-
09-06-2019 - |
문제
자바스크립트에서 사용하는 시제품 라이브러리,다음과 같은 기능적인 건축이 가능합니다:
var words = ["aqueous", "strength", "hated", "sesquicentennial", "area"];
words.pluck('length');
//-> [7, 8, 5, 16, 4]
이 예제 코드에 해당하는
words.map( function(word) { return word.length; } );
궁금하는 경우 비슷한 가능한에서는 F#:
let words = ["aqueous"; "strength"; "hated";"sesquicentennial"; "area"]
//val words: string list
List.pluck 'Length' words
//int list = [7; 8; 5; 16; 4]
를 작성하지 않고도:
List.map (fun (s:string) -> s.Length) words
이것은 매우 유용 보일 때문에 나에게 그런 다음 없는 함수를 작성하를 위해 모든 속성을 액세스할 수 있습니다.
해결책
나는 당신의 요구에서는 F#메일링 리스트가 있습니다.희망 내가 도움이 될 수 있습니다.
당신이 사용할 수 있습 type 확장자 및 리플렉션을하실 수 있습니다.우리는 간단한을 연장하는 일반 목록 형식으로 뽑는 기능입니다.그런 다음 우리가 사용할 수 있습니다 뽑()에 모든 목록.알 수 없는 숙박 시설 목록을 반환하는 오류와 함께 문자열을 그만 내용입니다.
type Microsoft.FSharp.Collections.List<'a> with
member list.pluck property =
try
let prop = typeof<'a>.GetProperty property
[for elm in list -> prop.GetValue(elm, [| |])]
with e->
[box <| "Error: Property '" + property + "'" +
" not found on type '" + typeof<'a>.Name + "'"]
let a = ["aqueous"; "strength"; "hated"; "sesquicentennial"; "area"]
a.pluck "Length"
a.pluck "Unknown"
는 생성에 따라 결과에 대화형 창:
> a.pluck "Length" ;; val it : obj list = [7; 8; 5; 16; 4] > a.pluck "Unknown";; val it : obj list = ["Error: Property 'Unknown' not found on type 'String'"]
따뜻한 감사합니다,
DannyAsher
> > > > >
참고:사용하는 경우 <pre
>각도를 괄호
<'a>를 표시하지 않았지만 미리보기 창에서 그것을 잘 보았다.의 백틱 작동하지 않았습니다.했다 리조트에 당신은 도전하는 모든이며 잘못입니다.나는 생각하지 않는 것이 여기에 게까지 다시 FSharp 구문을 완벽히 지원합니다.
다른 팁
프로토 타입의 pluck
을 활용하는 것에서 Javascript object.method()
와 동일 object[method]
.
불행하게도 당신을 호출 할 수 없습니다 String.Length
하나 때문에 그것은 정체되는 방법입니다.할 수 있습 그러나 사용:
#r "FSharp.PowerPack.dll"
open Microsoft.FSharp.Compatibility
words |> List.map String.length
그러나 사용 Compatibility
아마 일을 더 혼란을 찾는 사람들이 당신의 코드입니다.
제휴하지 않습니다 StackOverflow