Macro alloc::vec

1.0.0 · source ·
macro_rules! vec {
    () => { ... };
    ($elem:expr; $n:expr) => { ... };
    ($($x:expr),+ $(,)?) => { ... };
}
Expand description

创建一个包含参数的 Vec

vec! 允许使用与数组表达式相同的语法定义 Vec。 该宏有两种形式:

  • 创建一个包含给定元素列表的 Vec
let v = vec![1, 2, 3];
assert_eq!(v[0], 1);
assert_eq!(v[1], 2);
assert_eq!(v[2], 3);
Run
  • 根据给定的元素和大小创建 Vec
let v = vec![1; 3];
assert_eq!(v, [1, 1, 1]);
Run

请注意,与数组表达式不同,此语法支持所有实现 Clone 的元素,并且元素的数量不必是常量。

这将使用 clone 复制表达式,因此在具有非标准 Clone 实现的类型上使用此表达式时应格外小心。 例如,vec![Rc::new(1); 5] 将对相同的 boxed 整数值创建五个引用的 vector,而不是对 boxed 整数独立引用的五个引用。

另外,请注意,允许使用 vec![expr; 0],并产生一个空的 vector。 然而,这仍然会计算 expr,并立即丢弃结果值,因此请注意副作用。