클로저는 고정 값 복사본이 아니라 어휘 셀을 캡처하므로 관련 프로시저가 하나의 비공개 바인딩을 공유할 수 있습니다.
한눈에 보기
LISPEX
(define counter (let ((n 0)) (lambda () (set! n (+ n 1)) n)))
(list (counter) (counter))결과
OUTPUT
(1 2)작업 방법
- 바깥
let에서 상태를 만들고 읽거나 바꾸는 프로시저를 반환하며 해당 셀은 그 프로시저로만 접근하게 합니다. - 가려진 바인딩은 다른 셀을 할당하며
set!은 가장 가까운 해석 바인딩을 갱신합니다. - 최상위 재정의는 이전 클로저가 보는 원래 전역 셀을 갱신합니다.
경계
- 공유 변경은 여기서 결정적이지만 소유 범위를 좁히고 명시적으로 테스트해야 합니다.