문제

Microsoft에서 F# 샘플, 그들은 ">>"연산자를 다음과 같이 사용합니다.

test |> Seq.iter (any_to_string >> printfn "line %s");

이 맥락에서 ">>"연산자는 무엇을합니까? 시퀀스의 각 항목 (이 경우 배열)이 any_to_string 암시 적으로? 이것은 비슷합니다 (fun item -> printfn "line %A" item)?

도움이 되었습니까?

해결책

동등한 코드는 다음과 같은 방식으로 작성할 수 있습니다.


test |> Seq.iter(fun x -> printfn "line %s" (any_to_string x))

다시 말해, >> 연산자는 단순히 다음을 수행합니다. f (x) type t와 y)가 t 형이있는 함수 f (x)가 주어지면 f >> g를 사용하여 함수 h (z)를 만들 수 있습니다. g (f (x))와 동일합니다. 인수는 없지만 내부 및 외부 기능을 해당 연산자에게 전달해야하며 결과는 코드에서 언제든지 적용 할 수있는 기능이므로 다음을 수행 할 수 있습니다.


//myFunc accepts any object, calls its ToString method, passes ToString
//result to the lambda which returns the string length. no argument is
//specified in advance
let myFunc = any_to_string >> (fun s -> s.Length)
let test = 12345
let f = 12345.0
//now we can call myFunc just like if we had definied it this way:
//let myFunc (x:obj) = obj.ToString().Length
printfn "%i" (myFunc i)
printfn "%i" (myFunc f)

다른 팁

(>>) 두 가지 함수 (호환 인수와 함께)를 취하고 하나의 함수로 결합하는 ( "composes") 고차 함수입니다.

예를 들어

let len (s : string) = s.Length
let show (n : int) = n.ToString()

라인

(show >> len) 15

동일합니다

len (show 15)

만큼 잘

show 15 |> len

정의

http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/fsharp.core/microsoft.fsharp.core.operators.html

말한다

val ( >> ) : ('a -> 'b) -> ('b -> 'c) -> ('a -> 'c)
//Compose two functions, the function on the left being applied first

그러나 다른 사람들이 더 심층적 인 설명을 제공하기를 바랍니다.

편집하다

지금 MSDN DOC

http://msdn.microsoft.com/en-us/library/ee353825(vs.100).aspx

기능 구성 연산자입니다 (다른 게시물에 설명 된대로)

그의 의미론을보기 위해이 연산자를 직접 정의 할 수 있습니다.

let (>>) f g = fun x -> g (f x)

C#, Generics 또는 Lambdas에 불편한 경우에는 전혀 도움이되지 않을 수 있지만 C#에 해당합니다.

//Takes two functions, returns composed one
public static Func<T1, T2> Compose<T1, T2, T3>(this Func<T1, T2> f, Func<T2, T3> g)
{
    return (x) => g(f(x));
}

유형 매개 변수를 보면 Brian의 답변과 같은 것을 읽습니다.

Compose는 T1에서 T2로 이동하는 하나의 함수와 T2에서 T3으로 이동하는 하나의 기능을 취하고 T1에서 T3으로 이동하는 두 가지의 조합을 반환합니다.

그만큼 >> 연산자는 기능 구성을 수행하며 꽤 잘 설명됩니다. Wikipedia에서. Dustin Campbell은 그것을 잘 사용하고 그것을 설명합니다 ( |> (포워드 파이프) 운영자) 그의 블로그에서.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top