Что я делаю не так при попытке склеить коллекции в таком контексте?
Амперсанд воткни
.iter возвращает итератор по &T
Тогда ловлю вот это | 36 | quotes_mapped.extend(&iter); | ^^^^^ &std::slice::Iter<'_, Answer<'_>> is not an iterator | Не совсем понял про то куда амперсанд нужно воткнуть
Хм Окей, я не прав
Т.е. extend должен клеить коллекции ссылок, а не коллекции самих переменных?
замени .iter на .into_iter
вот компилирующийся вариант: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=8e8713088973d4bd321cc8379284457d но лучше бы конечно целиком переделать
Тогда интуитер там нужен разве? Экстенд же сам его вызывает?
Оокей, сейчас посмотрю, спасибо!
Ты волшебник! Большое спасибо Не думаю что там получится конкретно переделать, если я не ошибаюсь, там без клонирования не обойдешься
Интересно... Как оно компилируется с map(|x| Answer::Quote(&x))? Там x - это уже ссылка
не мутабельная же
ну, как минимум &String можно заменить на &str, плюс непонятно, как используется quotes_mapped
магия коэрсинга =) а так да, можно просто на .map(Answer::Quote) заменить
Там &String потому, что я выпилил изначальный код сериализации, а quotes_mapped как раз должен быть коллекцией-объединением из которой получается рандомное значение Хотя возможно про стрингу надо дополнительно покопать, спасибо
Внезапно, видимо, дереф коэршн свою роль сыграл как-то.
Круто, действительно, спасибо
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2975069c324b19531980f2129ed7adc7 могу еще таокй вариант предложить с поменьше копирования
Да. Deref coercion at function argument coercion site. Практически никогда не использовал для конверсии &&T -> &T так что удивился
Обычно клиппи за такое ругает, вот видимо и уходит до мержа кода
Обсуждают сегодня