Я думаю, вот это "F: Fn(&'a Self) -> I,". Т.е. self передастся в f со временем жизни равным самой функции c, а потом будет использована мутабельная ссылка на self. Потенциально, f может где-то сохранить &self и получится, что есть и мутабельная и немутабельная ссылка в одно и то же время.
у тебя метод a возвращает итератор по &Foo, т.е. &self держится, и в это же время ты заборроувенный self пытаещся ещё раз борроувить мутабельно вызывая метод c
ну там итератор после count не используется же
у тебя проблема в строке 4 таким способом использовать функции не получится, ты два раза борроувишь, и один из них - мутабельно ну это я так думаю, может конечно гоню фигню
ну вот вроде к моменту мутабельного борроу можно немутабельный завершить но как это компилятору объяснить?
а там можно как-то адекватнее лайфтаймы расставить? а то другие варианты ещё более страшные ошибки давали
а, ну вообще да странно, не могу вспомнить почему я подумал что в 4ой строке проблема
Сейчас никак. Ограничение там должно быть F: for<'b> Fn(&'b Self) -> impl Iterator<Item = &'b Foo>. Но оно не скомпилируется. Разве что так сделать https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=54859277998ad014f074d342b4c81efa
да я пробовал там нельзя это b в 2 констрейнта протащить
Обсуждают сегодня