У меня проблема с пониманием владения, когда вызывается функция более высокого порядка. Я должен удалить записи из первого вектора, если элементы существуют во втором векторе, поэтому я предпринял эту попытку:
fn array_diff<T: PartialEq>(a: Vec<T>, b: Vec<T>) -> Vec<T> {
a.iter()
.filter(|incoming| !b.contains(incoming))
.collect::<Vec<T>>()
}
Я не могу изменить сигнатуру функции. Вызов .collect()
не работает, потому что все, что я получаю, это ссылка на элементы в a
. Хотя это общий характер, я не знаю, возможен ли результат copy
или clone
. Я также, вероятно, не могу разыменовать элементы в a
.
Есть ли способ исправить этот кусок кода, не переписывая его с нуля?