История изменений
Исправление Virtuos86, (текущая версия) :
Лол. Нахуа в языке системного программирования говно вроде этого for_each, а также всяких map, filter и иже с ними?
Ты забыл объяснить, почему все эти комбинаторы — говно.
Нужны они (и остальные замечательные и полезные комбинаторы) чтобы работать с итераторами. Итератор выдаёт итемы типа Option<T>
: или Some(T), или None. Чтобы не пердолиться в цикле (псевдокод):
let mut v = Vec::new();
for i in <Iterator> {
match i {
Some(T) => v.push(func(i)),
None => break
}
}
используем элегантный map
, который выполняет матчинг за нас:
let v: Vec<T> = <Iterator>.map(|i| func(i)).collect(); // здесь вдобавок вектор `v` можно создать неизменяемым, в отличие от ручного пердолинга в первом варианте
Исправление Virtuos86, :
Лол. Нахуа в языке системного программирования говно вроде этого for_each, а также всяких map, filter и иже с ними?
Ты забыл объяснить, почему все эти комбинаторы — говно.
Нужны они (и остальные замечательные и полезные комбинаторы) чтобы работать с итераторами. Итератор выдаёт итемы типа Option<T>
: или Some(T), или None. Чтобы не пердолиться в цикле (псевдокод):
let mut v = Vec::new();
for i in <Iterator> {
match i {
Some(T) => v.push(func(i)),
None => break
}
}
используем элегантный map
, который выполняет матчинг за нас:
let mut v: Vec<T> = <Iterator>.map(|i| func(i)).collect();
Исходная версия Virtuos86, :
Лол. Нахуа в языке системного программирования говно вроде этого for_each, а также всяких map, filter и иже с ними?
Ты забыл объяснить, почему все эти комбинаторы — говно.
Нужны они (и остальные замечательные и полезные комбинаторы) чтобы работать с итераторами. Итератор выдаёт итемы типа Option<T>
: или Some(T), или None. Чтобы не пердолиться в цикле (псевдокод):
let mut v = Vec::new();
for i in <Iterator> {
match i {
Some(T) => v.push(func(T)),
None => break
}
}
используем элегантный map
, который выполняет матчинг за нас:
let mut v: Vec<T> = <Iterator>.map(|i| func(i)).collect();