2012-04-21 12 views
12

R programing for those coming from other languages जॉन कुक मेंशब्दावली और स्थैतिक स्कोपिंग के बीच भेद क्या हैं?

आर शाब्दिक scoping जबकि एस प्लस स्थिर गुंजाइश का उपयोग करता है का उपयोग करता है कहते हैं। अंतर सूक्ष्म हो सकता है, विशेष रूप से बंद होने का उपयोग करते समय।

मुझे यह अजीब लगता है क्योंकि मैंने हमेशा लेक्सिकल स्कॉइंग और स्थैतिक स्कोपिंग को समानार्थी माना है।

क्या वहां व्याख्यात्मक और स्थैतिक स्कोपिंग के लिए विशिष्ट विशेषताएं हैं, या यह एक भेद है जो समुदाय से समुदाय में बदलता है, व्यक्ति से व्यक्ति? यदि हां, तो सामान्य शिविर क्या हैं और मैं उन्हें अलग कैसे कहूं ताकि मैं इन शब्दों का उपयोग करते समय किसी के अर्थ को बेहतर ढंग से समझ सकूं।

+0

मुझे लगता है कि उनका मतलब 'लेक्सिकल 'के बजाय' गतिशील 'था। – Mehrdad

+2

@Mehrdad R गतिशील रूप से – efrey

+0

Weiird नहीं है .. यह देखने के लिए उत्सुक है कि उनका क्या मतलब था। मुझे बताने के लिए धन्यवाद। – Mehrdad

उत्तर

10

Wikipedia (और मैं) आपसे सहमत हूं कि "लेक्सिकल स्कोप" और "स्थिर स्कोप" शब्द समानार्थी हैं। This Lua discussion एक भेद बनाने की कोशिश करता है, लेकिन ध्यान देता है कि लोग इस भेद के बारे में सहमत नहीं हैं। :-)

ऐसा प्रतीत होता है कि सबसे अधिक वर्तमान-निष्पादन रिकॉर्ड की तुलना में प्रयास किए गए भेद को अलग-अलग फ़ंक्शन-एक्टिवेशन-रिकॉर्ड ("स्टैक ब्लॉक", यदि आप करेंगे) में नामों तक पहुंचने के साथ करना है, जो मुख्य रूप से (? केवल) नेस्ट कार्यों में होता है:

function f: 
    var x 
    function h: 
     var y 
     use(y) -- obviously, accesses y in current activation of h 
     use(x) -- the question is, which x does this access? 
शाब्दिक गुंजाइश के साथ

, जवाब है और "कि h की सक्रियता बुलाया f की सक्रियता" गतिशील गुंजाइश के साथ इसका मतलब है "हाल ही में सक्रियण किसी भी चर है कि नाम x "(जो f नहीं हो सकता है)। दूसरी तरफ, यदि भाषा x के उपयोग को रोकती है, तो "x" के बारे में कोई सवाल नहीं है क्योंकि उत्तर "त्रुटि" है। :-) ऐसा लगता है कि कुछ लोग इस तीसरे मामले को संदर्भित करने के लिए "स्थिर दायरा" का उपयोग करते हैं।

+1

तो दूसरे शब्दों में, बंद होने के बिना व्याख्यात्मक स्कोपिंग? – Mehrdad

+2

हां। बेशक मैं (ओपी की तरह) वास्तव में अनुमान लगा रहा हूं कि उनका क्या मतलब है। – torek

+0

दिलचस्प ... +1 ठंडा – Mehrdad

4

आर आधिकारिक दस्तावेज भी आर और एस प्लस के बीच दायरे से मतभेद के पते: एस प्लस से

cube <- function(n) { 
    sq <- function() n*n 
    n*sq() 
} 

परिणाम: http://cran.r-project.org/doc/manuals/R-intro.html#Scope

उदाहरण लिंक से दिए गए इस तरह सरल किया जा सकता और आर अलग हैं:

## first evaluation in S 
S> cube(2) 
Error in sq(): Object "n" not found 
Dumped 
S> n <- 3 
S> cube(2) 
[1] 18 
## then the same function evaluated in R 
R> cube(2) 
[1] 8 

मुझे व्यक्तिगत रूप से लगता है कि आर में चर का इलाज करने का तरीका अधिक प्राकृतिक है।

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