2014-10-11 50 views
2

在以下提交到编译器如何重写Vec.append“赞成”extend?

fn main() 
{ 
    let abc = vec![10u, 20u, 30u]; 

    let bcd = vec![20u, 30u, 40u]; 

    let cde = abc.append(bcd.as_slice()); 

    println!("{}", cde); 
} 

编译器发出如下警告:

此功能已经支持扩展的()已过时

将如何等效看看使用extend

+0

你看过文档吗?即使像方法签名这样简单的东西往往是非常有用的。 – 2014-10-11 22:02:26

回答

7

看看签名为extend

fn extend<I: Iterator<T>>(&mut self, iterator: I) 

注意,它通过一个可变的引用,采用自我,它不分得一杯羹,而是一个迭代器(这是比较通用的)。

最终的结果是这样的,那么:

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());