Замыкание лямбды в Dart
Замыкание - это лямбда, которая использует имя из окружающего кода. Переменная объявлена раньше в той же функции или на верхнем уровне файла, а блок обращается к ней при вызове:
var base = 10;
var addBase = (int n) => n + base;
print(addBase(5));
Внешнее значение можно менять между вызовами. Лямбда каждый раз прочитает актуальное число:
var factor = 2;
var scale = (int n) => n * factor;
print(scale(4));
factor = 3;
print(scale(4));
Локальная переменная функции тоже видна внутри лямбды, объявленной в этой функции:
int makeOffset(int delta) {
return (int n) => n + delta;
}
var step = makeOffset(7);
print(step(3));
Дана переменная:
var rate = 2;
Сохраните в applyRate лямбду с
целым параметром, которая умножает
аргумент на rate. Выведите
результат для 5.
Даны переменные:
var tag = "id";
var prefix = "field";
Сохраните в labelFor лямбду без
параметров, которая возвращает строку
"field: id" из этих имен.
Выведите результат.
Определите, что выведет программа:
var shift = 1;
var bump = (int n) => n + shift;
print(bump(4));
shift = 5;
print(bump(4));