En premier lieu, il existe deux types de portées.
Chacune est une spécification de référence de variable et la portée lexicale est adoptée dans de nombreux langages majeurs tels que Ruby, Java, Javascript et python.
C'est très simple. Voir le code ci-dessous.
var = 'Je suis au top'
def a_method
return var
end
def b_method
var = 'Je suis le contenu de l'objet'
return var
end
a_method
#-> 'Je suis au top'
C'est naturel lors de l'écriture de Ruby etc., mais il n'est pas possible de faire référence à la var de b_method depuis a_method. Il s'agit de `` portée lexicale '' ... !!! Cependant, il semble qu'il existe des langages dans le monde où la portée des variables est déterminée lorsqu'une fonction est évaluée. Il semble qu'on les appelle des portées dynamiques, mais par exemple, Lisp et Emacs semblent adopter ces portées.
Ce n'est pas Ruby. Ruby dynamique qui utilise une portée dynamique de type Ruby. (Il n'y a rien de tel, mais c'est un mot inventé.)
def a_method
p var
end
def b_method
var = 'Je suis B'
a_method
end
def c_method
a_method
end
b_method
#-> 'Je suis B'
c_method
#-> undefined variable 'var'
Sera. Autrement dit, la portée est déterminée lorsque vous évaluez la fonction ***, et non la portée lorsque vous définissez la fonction. *** ***
Il semble facile d'implémenter le langage w Pourquoi Lisp, Emacs, etc. l'ont-ils adopté? Il semble que cela soit écrit de cette façon. Lol
Recommended Posts