将以下内容提交给编译器
fn main()
{
let abc = vec![10u, 20u, 30u];
let bcd = vec![20u, 30u, 40u];
let cde = abc.append(bcd.as_slice());
println!("{}", cde);
}
编译器发出以下警告:
此函数已被弃用,转而使用extend()
使用extend
等效的外观如何?
答案 0 :(得分:7)
查看extend
的签名:
fn extend<I: Iterator<T>>(&mut self, iterator: I)
请注意,它通过可变引用获取self,并且它不需要切片而是迭代器(这是更通用的)。
最终结果如下:
abc.extend(bcd.into_iter());
或者这个:
abc.extend(bcd.iter().map(|&i| i))
(请记住Vec.iter()
产生的东西会迭代引用而不是值,因此需要.map(|&i| i)
。)
我有点惊讶它推荐extend
,因为push_all
是一个更直接的替代品,需要一个切片而不是迭代器:
abc.push_all(bcd.as_slice());