2012-04-21 31 views
12

W R programing for those coming from other languages Johna Cooka mówi, żeJakie są różnice między zakresami leksykalnymi i statycznymi?

R wykorzystuje leksykalny scopingu natomiast S-PLUS wykorzystuje zakres statycznej. Różnica może być subtelna, szczególnie w przypadku stosowania zamknięć.

Znalazłem to dziwne, ponieważ zawsze myślałem, że zakresy leksykalne i statyczne scoping, gdzie synonim.

Czy istnieją wyraźne atrybuty dla zakresu leksykalnego i statycznego, czy też jest to rozróżnienie, które zmienia się ze społeczności na społeczność, z osoby na osobę? Jeśli tak, jakie są ogólne obozy i jak je rozdzielić, aby lepiej zrozumieć czyjeś znaczenie, kiedy używają tych słów.

+0

Zgaduję, że mieli na myśli 'dynamic' zamiast' leksykalny'. – Mehrdad

+2

@Mehrdad R nie jest zakresem dynamicznym – efrey

+0

Weiird .. ciekawi, co mieli na myśli. Dzięki, że dałeś mi znać. – Mehrdad

Odpowiedz

10

Wikipedia (i ja) zgadzam się z tobą, że terminy "zakres leksykalny" i "zakres statyczny" są synonimami. This Lua discussion próbuje dokonać rozróżnienia, ale zauważa, że ​​ludzie nie zgadzają się co do tego rozróżnienia. :-)

Wydaje mi się, że próba rozróżnienia ma związek z dostępem do nazw w innym rejestrze aktywacji funkcji ("blok stosu", jeśli wolisz) niż rekord najbardziej aktualnej realizacji, który głównie (? tylko) występuje w zagnieżdżonych funkcji:

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? 

z zakresem leksykalnym, odpowiedź brzmi „aktywacja f że nazywa aktywację h” oraz z dynamicznym zakresem oznacza „najnowszą aktywację który ma żadnej zmiennej o nazwie x "(która może nie być numerem f). Z drugiej strony, jeśli język zabrania używania w ogóle x, nie ma mowy o "która jest x", ponieważ odpowiedź brzmi "błąd". :-) Wygląda na to, że niektórzy używają "zakresu statycznego" w odniesieniu do tego trzeciego przypadku.

+1

Innymi słowy, leksykalne określanie zakresu bez zamykania? – Mehrdad

+2

Tak. Oczywiście ja (tak jak OP) tak naprawdę zgaduję, o co im chodzi. – torek

+0

Interesujące ... +1 fajne – Mehrdad

4

oficjalnej dokumentacji R odnosi się także różnice w zakresie między R i S-Plus: http://cran.r-project.org/doc/manuals/R-intro.html#Scope

Podany przykład od połączenia można uprościć następująco:

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

wyników z S-Plus i R są różne:

## 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 

Osobiście uważam, że sposób traktowania zmiennej w R jest bardziej naturalny.

Powiązane problemy