Rust 中相对向量大小调整的一行代码

One-liner for relative-vector-resizing in Rust

如果我想在 C++/Swift/Any 其他语言中调整向量的大小,我通常会写这样的东西 my_vec.resize(my_vec.size(), 0x00); 但是如果我在 Rust 中尝试这样做,我会得到错误 immutable borrow occurs here

我当然可以这样写:

let old_size = my_vec.len();
my_vec.resize(old_size - 2, 0x00);

但我很确定有一条线...

您目前无法按照 中所述将两行合二为一。

but I'm pretty sure that there is an one-liner...

当然:

{ let old_size = my_vec.len(); my_vec.resize(old_size - 2, 0x00); }

不厚脸皮,可以加一个trait方法:

trait ResizeRelative<T> {
    fn resize_relative(&mut self, delta: isize, default: T);
}

impl<T: Clone> ResizeRelative<T> for Vec<T> {
    fn resize_relative(&mut self, delta: isize, default: T) {
        let len = if delta < 0 {
            self.len() - ((-delta) as usize)
        } else {
            self.len() + delta as usize
        };

        self.resize(len, default);
    }
}

fn main() {
    let mut v = Vec::new();
    v.resize_relative(3, 42);
    v.resize_relative(-1, 2);
    println!("{:?}", v);
}

注意您需要执行的旋转才能在两个方向上调整大小。即便如此,如果您将大小调整到零以下,仍有可能出现恐慌。