Node:Замыкание, Next:, Previous:Лексический контекст, Up:О замыканиях

[Показать/скрыть оригинал] [Показать/скрыть перевод] [Переключить перевод и оригинал]


14.4.5 Closure

14.4.5 Замыкание

Consider a let expression that doesn't contain any lambdas:

Предположим, что выражение let не содержит никаких labmda:

(let ((s (/ (+ a b c) 2)))
  (sqrt (* s (- s a) (- s b) (- s c))))

When the Scheme interpreter evaluates this, it

Когда интерпретатор Scheme вычисляет это, он

After the let expression has been evaluated, the local environment that was created is simply forgotten, and there is no longer any way to access the binding that was created in this environment. If the same code is evaluated again, it will follow the same steps again, creating a second new local environment that has no connection with the first, and then forgetting this one as well.

После того, как было вычислено выражение let, созданное локальное окружение просто забывается, и более нет никакого метода для доступа к привязкам, которые были созданы в этом окружении. Если один и тот же код будет вычислен снова, он пройдет соответствующие этапы снова, создав новое локальное окружение, не имеющее связи с первым, которое так же будет забыто по завершении вычисления.

If the let body contains a lambda expression, however, the local environment is not forgotten. Instead, it becomes associated with the procedure that is created by the lambda expression, and is reinstated every time that that procedure is called. In detail, this works as follows.

Однако, если тело let содержит lambda-выражение локальное окружение НЕ забывается. Вместо этого одно становится связанным с процедурой, которая создана при помощи lambda-вырахения и восстанавливается каждый раз, когда эта процедура вызывается. Более подробно, процесс выглядит так:

The result is that the procedure body is always evaluated in the context of the environment that was current when the procedure was created.

Как результат, тело процедуры будет всегда вычисляться в контексте окружения, в котором она (процедура) создавалась.

This is what is meant by closure. The next few subsections present examples that explore the usefulness of this concept.

Это явление называется замыкание (closure). Следующие несколько разделов содержат примеры, иллюстрирующие полезность этой концепции.


> > далее > >