в векторе при помощи функции, которая принимает эти самые значения (целиком, не по ссылке). Можно ли обойтись в этой ситуации без mem::replace?Вот пример кода https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=41a7f3754967f1810a8ffe95f12cfbcf
То есть у тебя будут значения в векторе неинициализированы сначала?
а чем mem::replace не нравится?
Мне кажется в вашем случае хватит drain+map+collect: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1c0250bebb191c87332ba006154d716c
А почему нельзя функцию (Foo) -> Foo переделать на эквивалентную (&mut Foo) -> ()?
Не забываем про take_mut https://docs.rs/take_mut/0.2.2/take_mut/
Ну, можно скастовать в сырой указатель, прочитать при помощи std::ptr::read, применить функцию и записать обратно при помощи std::ptr::write, но надо иметь в виду, что так очень легко поиметь use after free, если функция, принимающая по значению, паникует
Обсуждают сегодня