Size: a a a

2020 February 08

В

Вафель in rust_offtopic
red75prime
Я не про map_while() в текущем виде. А про предложенный вариант, который не останавливается на первом None
он останавливается на первом None, в том-то и дело! Просто он не Fused вот и всё
источник

r

red75prime in rust_offtopic
Вафель
он останавливается на первом None, в том-то и дело! Просто он не Fused вот и всё
Кто не fused? map_while как раз fused по смыслу. Но, похоже, для него забыли реализовать FusedIterator
источник

AZ

Alex Zhukovsky in rust_offtopic
red75prime
Я не про map_while() в текущем виде. А про предложенный вариант, который не останавливается на первом None
fn main() {
   let source = [Some(1), Some(2), None, None, Some(3)];
   let (nones, somes) = source.iter().enumerate().partition::<Vec<_>, _>(|&(idx, e)| e.is_none());
   println!("{:?}", nones);
   println!("{:?}", somes);
}
источник

В

Вафель in rust_offtopic
red75prime
Кто не fused? map_while как раз fused по смыслу. Но, похоже, для него забыли реализовать FusedIterator
map_while не обязан быть fused. Он только должен возвращать None (и этим останавливаться), если predicate возвращает None
источник

r

red75prime in rust_offtopic
Вафель
map_while не обязан быть fused. Он только должен возвращать None (и этим останавливаться), если predicate возвращает None
О чём мы говорим? О текущей реализации map_while или о том как map_while должен быть реализован?
источник

В

Вафель in rust_offtopic
red75prime
О чём мы говорим? О текущей реализации map_while или о том как map_while должен быть реализован?
Мы говорим о PR#68820
источник

В

Вафель in rust_offtopic
т.е. (на мой взгляд) как map_while должен быть реализован
источник

r

red75prime in rust_offtopic
По названию map_while я ожидаю, что результирующий итератор перестаёт вызывать .next() на итераторе, который он оборачивает, после того как предикат вернул None - по аналогии с take_while. Это влияет на семантику iter.by_ref().map_while(), например. Поэтому для итератора, который не прекращает вызывать .next() обёрнутого итератора нужно другое название. Например, and_then
источник

AZ

Alex Zhukovsky in rust_offtopic
red75prime
По названию map_while я ожидаю, что результирующий итератор перестаёт вызывать .next() на итераторе, который он оборачивает, после того как предикат вернул None - по аналогии с take_while. Это влияет на семантику iter.by_ref().map_while(), например. Поэтому для итератора, который не прекращает вызывать .next() обёрнутого итератора нужно другое название. Например, and_then
and_then это flat_map, не надо название для другого использовтаь
источник

В

Вафель in rust_offtopic
while тут говорит что он вернёт None на None предиката и всё. Этого достаточно для 99% юзкейсов ибо практически всё останавливается на первом None: fold, цикл for, for_each, etc
источник

В

Вафель in rust_offtopic
Alex Zhukovsky
and_then это flat_map, не надо название для другого использовтаь
+
источник

AZ

Alex Zhukovsky in rust_offtopic
Вафель
while тут говорит что он вернёт None на None предиката и всё. Этого достаточно для 99% юзкейсов ибо практически всё останавливается на первом None: fold, цикл for, for_each, etc
итератор не может вернуть что-то после None, Это противоречит его семнатике
источник

r

red75prime in rust_offtopic
Alex Zhukovsky
итератор не может вернуть что-то после None, Это противоречит его семнатике
"An iterator has a method, next, which when called, returns an Option<Item>. next will return Some(Item) as long as there are elements, and once they've all been exhausted, will return None to indicate that iteration is finished. Individual iterators may choose to resume iteration, and so calling next again may or may not eventually start returning Some(Item) again at some point."
источник

AZ

Alex Zhukovsky in rust_offtopic
red75prime
"An iterator has a method, next, which when called, returns an Option<Item>. next will return Some(Item) as long as there are elements, and once they've all been exhausted, will return None to indicate that iteration is finished. Individual iterators may choose to resume iteration, and so calling next again may or may not eventually start returning Some(Item) again at some point."
ну хрен знает
источник

В

Вафель in rust_offtopic
Alex Zhukovsky
итератор не может вернуть что-то после None, Это противоречит его семнатике
Тогда бы не было FusedIterator трейта.
источник

r

red75prime in rust_offtopic
Alex Zhukovsky
and_then это flat_map, не надо название для другого использовтаь
Ну как-нибудь по другому назвать. Неожиданная разница в де-факто семантике take_while и map_while - хуже, по-моему.
источник

AZ

Alex Zhukovsky in rust_offtopic
red75prime
Ну как-нибудь по другому назвать. Неожиданная разница в де-факто семантике take_while и map_while - хуже, по-моему.
я вообще не уверен, что такой комбинатор нужен. Если ты не видел, я чуть выше партишном сделал что ты хотел
источник

В

Вафель in rust_offtopic
red75prime
Ну как-нибудь по другому назвать. Неожиданная разница в де-факто семантике take_while и map_while - хуже, по-моему.
1) трейты показывают эту разницу (FusedIterator)
2) это указанно в доке
3) На эту разницу сложно напороться
источник

В

Вафель in rust_offtopic
Alex Zhukovsky
я вообще не уверен, что такой комбинатор нужен. Если ты не видел, я чуть выше партишном сделал что ты хотел
Мне где-то нужен был, поэтому и добавил. При том что до меня был ещё один pr, видимо не только мне такой адаптер нужен
источник

r

red75prime in rust_offtopic
Вафель
1) трейты показывают эту разницу (FusedIterator)
2) это указанно в доке
3) На эту разницу сложно напороться
Если дока противоречит ожиданиям, то это минус. Проще сменить название.
источник