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
просто по итератору. Надо только сказать, что этот итератор содержит &'static
f
Э
bar
(который ты тут foo
назвал), ты меняешь вектор, то у тебя инвалидируется итератор. Потому что он по слайсу от старого вектора идёт.f
bar
(который ты тут foo
назвал), ты меняешь вектор, то у тебя инвалидируется итератор. Потому что он по слайсу от старого вектора идёт.