K0
Size: a a a
K0
BV
K0
BD
BV
K0
BD
K0
BV
f
let elems = self.list.iter().cloned(); // вот тут без collect сохраняется ссылка на self
for elem in elems {
self.bar(elem) // fn bar(&mut self)
}АГ
let elems = self.list.iter().cloned(); // вот тут без collect сохраняется ссылка на self
for elem in elems {
self.bar(elem) // fn bar(&mut self)
}Э
let elems = self.list.iter().cloned(); // вот тут без collect сохраняется ссылка на self
for elem in elems {
self.bar(elem) // fn bar(&mut self)
}bar должен менять вектор в листе или нет? Просто так туда-сюда кидать &mut ссылки не очень.f
bar должен менять вектор в листе или нет? Просто так туда-сюда кидать &mut ссылки не очень.bar будет выполнять работу, требующую &mut self. Это упрощенный код, в реальности bar отправляет эвент, это требует mut.Э
bar будет выполнять работу, требующую &mut self. Это упрощенный код, в реальности bar отправляет эвент, это требует mut.f
.cloned()::<'static, _>, но увыf
for elem in self.list { self.foo(elem.clone()) }f
.collect, тк не нужно же материализовывать коллекцию, можно делать for просто по итератору. Надо только сказать, что этот итератор содержит &'staticf
Э
bar (который ты тут foo назвал), ты меняешь вектор, то у тебя инвалидируется итератор. Потому что он по слайсу от старого вектора идёт.f
bar (который ты тут foo назвал), ты меняешь вектор, то у тебя инвалидируется итератор. Потому что он по слайсу от старого вектора идёт.