Quando chamamos (environment-lookup system-global-environment name)
where system-global-environment
is the parent of top-level-environment , ele também pesquisará em seu ambiente filho?
Pelo documento , parece que eles estão separados. Se sim, por que definimos o ambiente pai aqui?
As operações nesta seção revelam a estrutura semelhante a um quadro dos ambientes, permitindo examinar as ligações de um ambiente específico separadamente daquelas de seu pai .
Ps Existe alguma tag apropriada como env
para esta pergunta no SO? (As recomendações como environment-variables
são inadequadas aqui.)
Os documentos dizem que
name
é encontrado no ambiente de discussão ou nos ancestrais .Então não, os ambientes infantis não são examinados.
Isso segue o Princípio da Menor Surpresa. Ao procurar um nome de variável, você não deve encontrar coisas em ambientes locais abaixo do seu escopo atual (ou context ).
Por exemplo, se você tiver uma função global
x
e uma função (ou qualquer lambda) com localx
, alguma coisa diferente do código da função deverá ser capaz de encontrar e usar o localx
(exceto recursos de introspecção)?Não, claro que não. Procure uma variável no contexto global, você só deverá encontrar variáveis globais.
Mas se você procurar por uma variável em um contexto local , caso ela não seja encontrada lá, você também deve procurar em seu contexto pai e continuar procurando até que a variável seja encontrada ou fiquemos sem ambientes (sendo o ambiente global o último ou superior ambiente no escopo atual).