2017-09-17 5 views
1

아래의 Swift 놀이터 코드 샘플의 addTwoNumbers 함수가 (Int, Int) -> Int의 함수로 "(+)"를 반환하고 나중에 두 개의 숫자를 함께 성공적으로 추가 할 수있는 방법을 완전히 망각했습니다. 단순히 "addTwoNumbers (2,2)"를 호출하면됩니다.스위프트 함수가 수학 연산자를 단독으로 반환 할 수있는 이유는 무엇입니까?

이 창조적 인 해결책은 거기에없는 것 같아서 스위프트 문서에서 설명을 찾을 수 없습니다. 나는 StackOverflow가 다른 질문에 대한 답과 비슷한 코드를 게시하는 것을 보았지만 은 왜 ""= (+)가 작동하는지 설명하지 못했다. 내가 뭘 놓치고 있니?

참고 : 저는 연산자가 퍼스트 클래스 함수 인 것을 알고 있습니다. 또한 고차 함수 개념을 이해합니다. 주제 샘플 (+)에 머물도록 코드 샘플을 줄였습니다. 귀하의 예제 아무것도에서

let addTwoNumbers: (Int, Int) -> Int = (+) 
print(addTwoNumbers(5,3)) //8 
+0

간단한하시기 바랍니다 @Carcigenicate에 거의 상응하는 것을

참고. 괄호 안에 +를 배치하면 그것을 객체로 만들 수 있습니까? 따라서 두 개의 인수로 호출하면 2 + 2와 같습니다. –

+0

@Carcigenicate : https://math.stackexchange.com/questions/168378/operator-vs-function의 의견은 "모든 연산자는 함수입니다"라고 말합니다. 따라서 함수가 연산자 (이 경우 함수 (+)도)를 반환하면, print ("hello")처럼 add (2,2)를 통해 호출하는 유일한 방법이라고 가정하는 것이 안전할까요?)? 즉, 두 개의 인수를 취하는 + 함수를 호출하지만, + (2,2)를 입력하는 대신 제공된 코드 샘플에 따라 add (2,2)를 입력해야합니다. –

+0

필자의 예제와 질문은 Higher Order Function 영역의 Swift 언어에 맞춰졌지만 어떤 언어로든 개념을 더 잘 이해할 수있는 방향을 제시해주었습니다. –

답변

0

정말 무엇을하는 일은 변수, 즉 addTwoNumbers에 값 +을 (운영자가 기능하고 기능 값으로 간주 할 수있다)을 할당하고, + 반환합니다.

이 변수의 유형은 (Int, Int) -> Int입니다. 즉, int를 반환하는 두 개의 int 함수입니다. 이제 함수는 일종의 후위 연산자로 괄호를 사용할 수있는 특수한 종류의 변수입니다. 일반 변수와 마찬가지로 비트는 .입니다. 괄호없이 addTwoNumbers이라는 이름을 쓰면 함수 (+가됩니다)를 참조하지만, 피연산자와 피연산자를 사용하면 대신 함수가 적용되고 값은 함수가 해당 인수와 함께 반환하는 값이됩니다. let addTwoNumbers: (Int, Int) -> Int = (+)func addTwoNumbers(_ a: Int, _ b: Int) -> Int { return a + b }