2009-06-04 7 views

Répondre

3

Portée des variables et de l'environnement auquel elles sont liées.

Et comment dur, ils sont à mettre en œuvre dans un compilateur :)

ClosureA peut être lié à sa portée locale LA et parent-champ PA, puis une fermeture à l'intérieur qui a appelé ClosureB est lié à (potentiellement) LB, LA, PA

func a(v1,v2,v3){ 
    closure_b(bv1, bv2, bv3) { # Closure 
     b_local1 = bv1 
     b_local2 = v1 # parent scope 

     closure_c(cv1, cv2) { # Nested closure has 'closure_b's scope too 
      c_local1 = cv1 
      c_local2 = bv1 # direct-parent scope 
      c_local3 = v1 # parent's parent scope (nesting) 
      c_local4 = b_local2 
     } 
     return closure_c; 

    } 
    return closure_b(); # closure_b() returns closure_c 
} 
+0

Je suis tout dans votre code jusqu'à la déclaration de retour. Je ne pensais pas que closure_c était accessible en dehors de closure_b. Pouvez-vous expliquer comment closure_c peut être retourné à partir de la portée de func a? Ou la déclaration de retour dans cet exemple est-elle incorrecte? – adamjcooper

+0

Typo dans mon cas, va corriger. –

+0

Super, merci pour l'exemple utile. – adamjcooper

Questions connexes