使用 vec 宏创建特定数据类型的 Vec 的惯用方法是什么?

Vik*_*oel 4 rust

类似的东西let v = vec![1, 2, 3];会默认为i32,但我想将类型指定为u8.

一种替代方法是使用以下命令创建:

let v: Vec<u8> = vec![1, 2, 3];
Run Code Online (Sandbox Code Playgroud)

或者

let v: Vec<u8> = Vec::new();
v.push(1);
v.push(2);
v.push(3);
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法直接使用宏?在这两种情况下,我都需要声明一个变量。

有时,我需要在语句中使用向量assert。如果有办法避免创建变量,我可以写:

pub fn func1() -> &[u8] {
  // return slice [1, 2, 3] of [u8];
}
assert_eq!(vec![1, 2, 3], func1());
Run Code Online (Sandbox Code Playgroud)

lko*_*bly 9

在这种情况下,将自动推断出向量的类型。这编译得很好:

fn func1() -> Vec<u8> {
    vec![1, 2, 3]
}

fn main() {
    assert_eq!(func1(), vec![1, 2, 3]);
}
Run Code Online (Sandbox Code Playgroud)

如果您需要显式指定类型,您可以执行类似的操作vec![1u8, 2, 3]

  • 这是个好问题,实际上我不能。我从来没有考虑过可能还有其他方法可以做到这一点(对于这种特定情况,使用assert_eq)。 (2认同)