JavaScript отличается от Dart.
Согласно документации , метод map
для Iterable
означает
вернуть новый lazy Iterable
с элементами, созданными путем вызова f
для каждого элемента этого элемента Iterable в итерационном порядке.
Другими словами, функция в map
метод не вызывается, пока он не понадобится, потому что он lazi вызван. Он ничего не вернет, пока что-то не спросит, что он должен вернуть. Пока возвращаемое Iterable не повторяется, предоставленная функция f
не будет вызываться.
Попробуйте dartpad.dev
void main() {
var arr = [1, 2, 3];
var arr2 = arr.map((item)=> {
item * 2
});
print ('$arr2');
}
В приведенном выше примере функция в методе map
, соответствующем arr
, вызывается / вызывается, потому что ее запрашивает $arr2
в функции печати. Из-за этого он запускает код внутри него, и параметр в методе print
выводится на печать
Try
print([1, 2, 3].map((i) {
print(i);
return;
}));
Вы увидите, что вы получите желаемый результат, потому что функция в методе map
была вызвана методом print
.
Поскольку метод lazy , он не будет вызван, пока его не запросят. Добавление метода map
в массив не вызывает его. Вы должны требовать, что он возвращает для вызова функции в методе map
.