수색…


소개

StackOverflow 클로저 태그에서 :

클로저는 변수가 정의 된 범위에서 변수를 참조하는 최상위 함수입니다. 정의 범위가 끝난 후 클로저가 여전히 존재하면 닫히는 변수도 계속 존재합니다.

비고

클로저와 오브젝트를 유사한 것으로 간주하는 것이 유용 할 때도 있습니다.

존경스런 선생님은 그의 학생 Anton와 함께 걷고있었습니다. 마스터에게 토론을 촉구하기를 바란다. Anton는 "스승님, 물건이 아주 좋은 것이라고 들었다. 사실인가?" Qc Na는 그의 학생을 불쌍하게 바라보며 "어리석은 학생들 - 물건은 가난한 사람의 닫음에 불과합니다."라고 대답했습니다. Chastised, Anton는 그의 주인에게서 그의 휴가를 가지고 가고 폐쇄를 공부하기에 그의 세포로 돌려 보냈다. 그는 신중하게 "Lambda : Ultimate ..."시리즈의 논문과 그 사촌을 읽고 클로저 기반 객체 시스템으로 작은 Scheme 인터프리터를 구현했습니다. 그는 많은 것을 배웠고 그의 주인에게 그의 진보를 알리기를 고대했다.

다음 번에 Qc Na와 함께 걸어 가면서 안톤은 "스승님, 나는 그 문제를 부지런히 연구했으며, 지금은 사물들이 진정으로 가난한 사람의 종결이라는 것을 이해한다"고 말하면서 그의 주인을 감동 시키려고했다. Qc Na는 그의 막대기로 안톤을 때리고 "언제 배울 것인가? 클로저는 가난한 사람의 물건이다"라고 대답했다. 그 순간에 안톤은 깨달음을 얻었습니다.

출처 : http://c2.com/cgi/wiki?ClosuresAndObjectsAreEquivalent

정적 환경으로 폐쇄

클로저는 내부 상태를 유지하는 프로 시저입니다.

클로저를 반환하는 프로 시저를 정의합니다.

make-an-adder 프로 시저는 하나의 인수 x 취하여 값을 덮는 함수를 반환합니다. 또는 다른 식으로 표현하면 x 는 반환 된 함수의 어휘 범위 내에 있습니다.

#lang racket
(define (make-an-adder x)
  (lambda (y)
    (+ y x)))

용법

make-an-adder 프로 시저를 호출하면 클로저 인 프로 시저가 반환됩니다.

Welcome to DrRacket, version 6.6 [3m].
Language: racket, with debugging; memory limit: 128 MB.
> (define 3adder (make-an-adder 3))
> (3adder 4)
7
> (define 8adder (make-an-adder 8))
> (8adder 4)
12


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow