खोज…
परिचय
StackOverflow बंद टैग से:
क्लोजर एक प्रथम श्रेणी का कार्य है जो उस दायरे से भिन्न होता है जो उस दायरे से आता है जिसमें इसे परिभाषित किया गया था। यदि इसका परिभाषित दायरा समाप्त होने के बाद भी बंद रहता है, तो इसके बंद होने वाले चर भी मौजूद रहेंगे।
टिप्पणियों
यह कभी-कभी समान रूप से क्लोजर और ऑब्जेक्ट्स पर विचार करने के लिए उपयोगी होता है।
आदरणीय मास्टर Qc Na अपने छात्र एंटोन के साथ चल रहे थे। एक चर्चा में मास्टर को संकेत देने की उम्मीद करते हुए, एंटोन ने कहा "मास्टर, मैंने सुना है कि वस्तुएं बहुत अच्छी चीज हैं - क्या यह सच है?" Qc Na ने अपने छात्र पर दया करते हुए देखा और उत्तर दिया, "मूर्ख शिष्य - वस्तु केवल एक गरीब व्यक्ति के बंदी हैं।" संस्कारित, एंटोन ने अपने गुरु से छुट्टी ली और बंद होने पर अध्ययन करने के इरादे से अपने सेल में लौट आए। उन्होंने कागजात और उसके चचेरे भाइयों की पूरी "लैम्ब्डा: द अल्टीमेट ..." श्रृंखला को ध्यान से पढ़ा और एक क्लोजर-आधारित ऑब्जेक्ट सिस्टम के साथ एक छोटी स्कीम दुभाषिया को लागू किया। उन्होंने बहुत कुछ सीखा, और अपनी प्रगति के मास्टर को सूचित करने के लिए तत्पर थे।
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