如何有效地解构向量

Sup*_*ngh 1 rust

我正在尝试找到一种有效的方法来解构 Rust 中的向量。将索引上的值分配给相应的变量。我已经浏览了文档但无法找到答案。

let (frequency, samplingrate, samples, slope, duration, steps) = (input[0], input[1], input[2], input[3], input[4], input[5]);
Run Code Online (Sandbox Code Playgroud)

Pit*_*taJ 10

Rust 的名称是切片模式

但切片模式的使用不能无可辩驳,除非用于数组。也就是说,你不能只做这样的事情:

let [a, b, c] = v[..3];
Run Code Online (Sandbox Code Playgroud)

因为编译器无法证明生成的切片的长度是 3 个元素,尽管这对我们来说可能是显而易见的。

相反,您需要告诉编译器将给定的切片转换为数组,如下所示:

let [a, b, c]: &[_; 3] = v[..3].try_into().unwrap();
Run Code Online (Sandbox Code Playgroud)

因为数组大小在编译时已知,所以编译器可以证明这样的操作是万无一失的。

对于您的情况,代码应如下所示:

let [frequency, samplingrate, samples, slope, duration, steps]: &[_; 6] = input[..6].try_into().unwrap();
Run Code Online (Sandbox Code Playgroud)

操场

  • 或者通过“match”表达式。在“match”表达式中,我们还有一个额外的好处,即“失败”分支可以包含“panic!”以及一条详细的消息。 (2认同)