如何重写Vec.append"赞成"延伸?

时间:2014-10-11 21:46:06

标签: vector append sequence deprecated rust

将以下内容提交给编译器

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等效的外观如何?

1 个答案:

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