У меня есть функция, подпись которой в ржавчине следующая:
pub fn get_rand_pose<num>() -> GenericArray<ElemType, num>
where num: ArrayLength<ElemType> + typenum::marker_traits::Unsigned;
Затем я хочу использовать только первый элемент возвращаемого значения и передать его другой функции, например, как:
let p = get_rand_pose::<typenum::U1>()[0];
other_fun(0, 1, p);
Предыдущий пример не компилируется. Я получаю следующее сообщение об ошибке:
cannot move out of here
help: consider using a reference instead
Мне нужно предоставить фактическое значение other_fun
вместо ссылки, поэтому предложение здесь не годится.
Что я сделал, чтобы решить эту проблему, так это использовал into_iter().next().unwrap()
, который выполняет свою работу, но мне интересно, насколько он эффективен и является ли это рекомендуемым решением для этой проблемы.
Я не хочу создавать дополнительные копии ни GenericArray, ни первого элемента, я просто хочу взять и использовать его первый элемент и забыть об остальной части массива. Как бы я это сделал?