无法将 Rust 向量附加到另一个向量

ZZZ*_*ZZZ 3 rust

我正在用 Rust 做 Leetcode 问题,遇到以下错误:

fn plus_one(digits: &mut Vec<u32>) -> &Vec<u32> {
    for i in (0.. digits.len()).rev() {
        if digits[i] < 10 {
            digits[i] = digits[i] + 1;
            break;
        }else{
            digits[i] = 0;
        }
    }

    if(digits[0] == 0) {
        let mut new_digits : Vec<u32> = vec![1];
        new_digits.extend(digits).        // This is the error
    }

    digits
}
Run Code Online (Sandbox Code Playgroud)

得到的错误:

--> src/easy/plus_one.rs:13:20
   |
13 |         new_digits.extend(digits)
   |                    ^^^^^^ the trait `Extend<&mut u32>` is not implemented for `Vec<u32>`
   |
   = help: the following other types implement trait `Extend<A>`:
             <Vec<T, A> as Extend<T>>
             <Vec<T, A> as Extend<&'a T>>
Run Code Online (Sandbox Code Playgroud)

有什么问题以及如何解决这个问题?

Cha*_*man 6

&mut Vec<u32>的迭代器产生&mut u32. Vec不能从它扩展(&u32不过它可以从迭代器扩展)。

最简单的修复方法是使用extend_from_slice()

fn plus_one(digits: &mut Vec<u32>) -> &Vec<u32> {
    for i in (0..digits.len()).rev() {
        if digits[i] < 10 {
            digits[i] = digits[i] + 1;
            break;
        } else {
            digits[i] = 0;
        }
    }

    if digits[0] == 0 {
        let mut new_digits: Vec<u32> = vec![1];
        new_digits.extend_from_slice(digits);
    }

    digits
}
Run Code Online (Sandbox Code Playgroud)