Я настоятельно рекомендую прочитать документацию типов и методов, прежде чем использовать их.По крайней мере, посмотрите на функцию подпись .Для slice::get
:
pub fn get<I>(&self, index: I) -> Option<&<I as SliceIndex<[T]>>::Output>
where
I: SliceIndex<[T]>,
Хотя здесь происходит несколько обобщений, важная часть заключается в том, что тип возвращаемого значения - Option
.Option<Vec>
не является Vec
.
Обратитесь к главе Rust Programming Language по перечислениям для получения дополнительной информации о перечислениях, включая Option
и Result
.Если вы хотите продолжить использовать семантику get
, вам необходимо:
- Переключиться на
get_mut
, если вы хотите изменить внутренний вектор. - Make
example
mutable. - Обработать случай, когда индексированное значение отсутствует.Здесь я использую
if let
.
let mut example: Vec<_> = std::iter::repeat_with(Vec::new).take(10).collect();
if let Some(v) = example.get_mut(0) {
v.push(String::from("test"));
}
Если вы хотите уничтожить программу, если значение отсутствует в индексе, самое короткое - использовать синтаксис индекса []
:
example[0].push(String::from("test"));