전역 함수는 이름이 있고 값을 캡처하지 않는 클로저입니다.왜 이것이 클로저 캡처로 계산되지 않습니까?
신속한 기능은 폐쇄의 공간적 형태입니다. 다른 함수는 이름을 가지고 있으며 전역 함수이면 주변 컨텍스트에서 상수와 변수를 캡처 할 수 없습니다.
내가 믿을 :
그러나, 나는 전역 함수는 또한 주변 상황의 상수와 변수를 캡처
let referenceInt = 10
func addOne() -> Int {
return referenceInt + 1 //captured the constant referenceInt
}
let fooA = addOne
let fooB = addOne
let fooC = addOne
print(fooA()) //prints 11
print(fooB()) //prints 11
print(fooC()) //prints 11, (func addOne captured referenceInt ?)
print(referenceInt) //prints 10
문제 (아래 예제 코드 참조) 수 있다는 것을 발견 다음 개념을 완전히 이해하지 못했습니다 :
단순히 놀이터에서 기능을 정의하십시오 (예 : addOne은() -> 여기에 지능)는 수도가되지는 전역 함수이 경우의 "캡처"잘못된 이해를 갖는
의미, 이것은 전혀 캡처되지 않습니다 (하지만 왜)
? 나는 매우 될 당신은 내가 잘못 이해하고 좀 설명을 줄 수도 좋을 것 어느 부분을 지적 할 수있는 감사하겠습니다:
내가 찾고 있어요 도와줍니다.
감사
PS :
이 질문에 그것에 더 깨끗한 대답은 아직 존재하지 않기 때문에 그러나, 나는 아직도 그것을 게시, this one의 중복 될 수 있으며 내 질문이 조금 더 질문을 밀었다. 그러나 여전히 그것을 닫고 싶다면, 나는 그것을 존중하며 당신에게서 배우기를 기꺼이 배웁니다.
클로저가 흥미롭고 실제로 캡처해야하는 이유를 보려면 내 책을 읽는 것이 도움이 될 것입니다. 여기에서 시작하십시오 : http://www.apeth.com/swiftBook/ch02.html#_closures – matt
친애하는 여러분, 매트, 내 문제를 지적했다고 생각해. 네, 저는 그 닫음을 완전히 이해하지 못했으며 전혀 닫히지 않는 느낌을 가졌습니다. 나는 당신의 책을 읽게되어 매우 행복 할 것입니다. 도움을 많이 주셔서 감사합니다 – SLN
코드 캡처를 볼 수있는 코드 수정을 추가했습니다. 나는 이것이 놀이터가 이런 종류의 것을 테스트하는 데별로 도움이되지 않는다는 당신의 다른 직관을 확인해 준다고 생각합니다. – matt