如何重写Vec.append"赞成"扩展?

dha*_*ech 2 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);
}
Run Code Online (Sandbox Code Playgroud)

编译器发出以下警告:

不推荐使用此函数,而使用extend()

相同的外观如何使用extend

Chr*_*gan 7

看看签名extend:

fn extend<I: Iterator<T>>(&mut self, iterator: I)
Run Code Online (Sandbox Code Playgroud)

请注意,它通过可变引用获取self,并且它不需要切片而是迭代器(这是更通用的).

最终结果如下所示,然后:

abc.extend(bcd.into_iter());
Run Code Online (Sandbox Code Playgroud)

或这个:

abc.extend(bcd.iter().map(|&i| i))
Run Code Online (Sandbox Code Playgroud)

(请记住,Vec.iter()产生的东西会迭代引用而不是值,因此需要.map(|&i| i).)

我有点惊讶它推荐extend,push_all更直接的替代,采取切片而不是迭代器:

abc.push_all(bcd.as_slice());
Run Code Online (Sandbox Code Playgroud)