use strict; use warnings; use utf8; use v5.14; # Вариант 1. # Постоянная лексическая переменная, объявленная # с помощью state - недоступна для внешнего кода. sub обновить { state $переменная += shift || 10 } say обновить($_) for 0..4; say '-' x 50; # Вариант 2. # В отличие от первого варианта здесь, как и должно быть, # значение "my" переменной вычисляется без оглядки на её # предыдущее состояние. sub обновить_снова { my $переменная += shift || 10; } say обновить_снова($_) for 0..4; say '-' x 50; # Вариант 3. # Достигаем аналогичного результата, как в варианте 1, # используя замыкание. sub обновить_ещё_разок { my $переменная; sub { $переменная += shift || 10 } } my $функция = обновить_ещё_разок; say $функция->($_) for 0..4; say '-' x 50; # Вариант 4. # Достигаем аналогичного результата, как в варианте 1, # используя замыкание и постоянную лексическую переменную. sub обновить_последний_раз { sub { state $переменная += shift || 10 } } my $новая_функция = обновить_последний_раз; say $новая_функция->($_) for 0..4;
суббота, 5 декабря 2015 г.
"Постоянные" переменные, state и замыкания
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий