Чистая правда со временем восторжествует! - Day

Sunday, October 9, 2011

7:38PM - Замыкания в ЯП

Возник такой вопрос относительно замыканий в современных языках программирования.

В большинстве языков -- замыкания, как я понимаю, автоматически создаются.
Вот пример отсюда (http://en.wikipedia.org/wiki/Closure_%28computer_science%29 ):


def counter():
x = 0
def increment():
nonlocal x
x += 1
print(x)
return increment

counter1_increment = counter()
counter2_increment = counter()

counter1_increment() # 1
counter1_increment() # 2
counter2_increment() # 1
counter1_increment() # 3


Пример, понятно, на Python.
Предположим, однако, что механизм описания для замыканий был бы не автоматическим, а каким-то более явным. Ну, вот как ниже:


def counter():
x = 0
bind counter (def increment():
nonlocal x
x += 1
print(x)
)
return increment


Это, конечно, уже не Питон, а некий псевдокод, но идею иллюстрирует. Суть в том, что для возвращаемой внутренней функции мы *явно* описываем сохраняемый контекст. Если надо сохранить контекст нескольких внешних функций -- применяем bind к ним всем.

Как-то так. Мне интересно, кто что думает про эту идею.

(2 comments | comment on this)
Previous day (Calendar) Next day