2010-07-17 8 views
8

मैं दूसरे दिन स्कैला पर जावा सम्मेलन में था और स्पीकर को 'पूर्ण संचालित बंद' कहा जाता था। मुझे एक परिभाषा को कम करने में कठिनाई हो रही है जो मुझे समझ में आता है। मैंने closures पर विकी पेज पढ़ा है, लेकिन वास्तव में यह मेरे लिए इसका उत्तर नहीं दिया। क्या कोई मुझे स्पष्ट कट परिभाषा के साथ मदद कर सकता है? शायद एक साधारण उदाहरण भी शामिल है।एक पूर्ण संचालित बंदरगाह क्या है?

धन्यवाद!

उत्तर

16

कंप्यूटर विज्ञान में, एक बंदरगाह मुक्त चर के साथ एक प्रथम श्रेणी का कार्य है जो व्याख्यात्मक वातावरण में बंधे हैं।

आपको विकिपीडिया लेख से इस वाक्य से अधिक की आवश्यकता नहीं है। जावा की कमी क्या है (बदसूरत वाक्यविन्यास के अतिरिक्त) बंद होने के बाहर से बाध्यकारी मुक्त चर की सुविधा है। एक उदाहरण:

int x = 0; 
new Runnable() { 
    public void run() { 
     x = 1; 
    } 
}.run(); 

यहां जावा कंपाइलर चर x के बारे में शिकायत करेगा।

स्केला में एक ही बात सिर्फ ठीक काम करता है और बहुत कम वर्बोज़ है:

var x = 0 
val fun =()=>{x=1} 
fun 
+0

यह वही है जो मैं खोज रहा था। बहुत बहुत धन्यवाद! – northpole

+0

@ जेस्पर: नहीं, अगर मैं एक्स फाइनल बना देता तो यह काम नहीं करेगा। मुझे बस एक अलग त्रुटि संदेश मिलेगा। ;) मैं केवल एक तत्व के साथ x को अंतिम int सरणी बना सकता हूं ... –

+0

@ जेस्पर, 'रननेबल' के भीतर से 'अंतिम' सरणी की सामग्री में किए गए संशोधनों को प्रत्येक स्कोप पर दिखाई देगा जहां सरणी दिखाई दे रही है। –

2

यह संभव है कि स्पीकर 'बंद शक्ति' के विपरीत 'पूर्ण संचालित' का उपयोग करे, जो many languages actually have है।

1

जहां तक ​​मुझे पता है, पूर्ण संचालित बंद का मतलब विशेष रूप से कुछ भी नहीं है लेकिन इसका अर्थ यह हो सकता है: वाक्यविन्यास की सादगी। कुछ बनाकर जावा बनाम अज्ञात भीतरी कक्षा को नए करने के बीच अंतर की दुनिया है (ए => < अधिकतम)। शायद सभी आसपास के चरों पर बंद करने की क्षमता केवल अंतिम नहीं है।

+2

वह उदाहरण बंद नहीं है (यह इसके संदर्भ से किसी भी चर को कैप्चर नहीं करता है)। हालांकि एक उदाहरण के साथ जो हल्का वजन सिंटैक्स का उपयोग कर रहा था, और एक बंद है, आपके पास एक बिल्कुल सही जवाब होगा (क्योंकि मुझे संदेह है कि स्पीकर सिंटैक्स का उपयोग करने के लिए आसान बात कर रहा था)। – Richard

+0

@ रिचर्ड: अच्छा बिंदु - –

+0

@ रिचर्ड अपडेट किया गया, हाँ वह चीजों को कम वर्बोज़ बनाने के बारे में बात कर रहा था। – northpole

9

जब से मैं अभी शुरुआत की तरह महसूस (डीपीपी और एम्बर की तुलना में) मैं एक शुरुआती भाषा में अभी शुरुआत करने के लिए यह स्पष्ट करने वाले :

पहला, अज्ञात फ़ंक्शन (या कोड ब्लॉक/लैम्ब्डा अभिव्यक्ति) केवल एक ऐसा फ़ंक्शन है जिसका नाम नहीं है। यह इस तरह एक चर से बंधे जा सकते हैं।

scala> val foo = (x: Int) => 2*x 
foo: (Int) => Int = <function1> 

scala> val bar = foo 
bar: (Int) => Int = <function1> 

scala> bar(5) 
res2: Int = 10 

तुम देखो, समारोह नाम foo नहीं है, यह बजाय पट्टी से कहा जा सकता है।

दूसरा, एक बंद एक अज्ञात फ़ंक्शन है जिसमें एक चर है जो फ़ंक्शन के अंदर परिभाषित नहीं किया गया है (फ़ंक्शन परिभाषित होने से पहले परिवर्तनीय/मान घोषित किया जाना चाहिए)। "पूर्ण संचालित बंद" शब्द इस कार्यक्षमता को संदर्भित कर सकता है।

scala> var constant = 7 
constant: Int = 7 

scala> val foo = (x: Int) => 2*x + constant 
foo: (Int) => Int = <function1> 

scala> foo(5) 
res3: Int = 17 

scala> constant = 6 
constant: Int = 6 

scala> foo(5) 
res4: Int = 16 

पहली बार जब आप इसे देखते हैं, तो आप सोच सकते हैं कि यह क्या अच्छा है। संक्षेप में, इसमें आवेदन के कई क्षेत्र हैं :-)

+0

उत्कृष्ट स्पष्टीकरण, धन्यवाद! – northpole

संबंधित मुद्दे