2012-07-09 4 views
6

필자는 항상 F #에 인수, 카레 스타일 및 튜플 스타일을 전달하는 두 가지 방법이 있다고 생각했습니다. 이게 맞습니까?F # 매개 변수 전달

한 스타일, 카레 스타일 및 인수는 단순한 값 또는 튜플 중 하나 일 수 있습니다.

someFunc (a,b) = 

이 튜플 될 일이 하나 카레 스타일의 인수를 함수 아닌가요? 따라서 pipleline 연산자를 사용하여이 함수에 튜플을 전달할 수 있습니까?

(1,2) |> someFunc 

이 맞 (여기서 튜플의 요소라는)?

답변

6

이 잘 작동합니다 - 당신이

을 할 필요가 - 차이는

let f (a,b) = ... 
let f2 a b = ... 

후 쉽게 부분적으로 적용 F2를 만들 수 있습니다,하지만 그것은 꽤 잘 작동하지 않는 F에 대한 경우입니다

let partial = fun t -> f (1,t) 
let partial2 = f2 1 
+0

예, "f"가 _one_ 인수를 갖기 때문에 명명 된 요소가있는 튜플이 발생했기 때문에 간단하지 않습니다. 나는 당신이 "somefunc abc (d, e, f) g"와 같은 펑키 한 것들을 할 수 있다는 것을 의미합니다. 이것은 분명히 순수한 카레 또는 typle 스타일이 아니며, F #은 카레 스타일만을가집니다. 인수는 단순히 값 또는 튜플입니다. 이것을 생각하는 올바른 방법입니까? –

+0

이것은 맞습니다. –

4

예, 모두 F # 기능은 "카레 스타일"입니다. 이 같은 정의가있는 경우 :

let someFunc (a,b) = a + b 

을 당신은 하나 개의 인자를받는 함수를 가지고 일치 패턴 (예, 패턴 매칭이 같은 놀라운 달콤한 장소에서 사용할 수 있습니다)에 의해 분해되는 튜플. 인수 자체 일치하는 패턴으로, 또한

let someFunc = function 
    | a, b -> a + b 

최초 버전에 해당

let someFunc t = 
    match t with 
    | a, b -> a + b 

:은 패턴 함수의 신체에 일치하는 이동하는 다음의 정의에 해당 이 간단한 명명 된 바인딩의 경우에는 분명히 바람직합니다.

그러나 F# methods은 "튜플 스타일"(표준 .NET 객체 지향 기능에 F #이 붙어있는 곳 중 하나임)에 유의하십시오.