如何在生锈中声明& [& T]]?

时间:2014-12-16 22:29:07

标签: vector reference rust

我有这个代码我无法编译:

let vec1 = [1i, 2i, 3i];
let vec2 = [4i, 5i];
let v: &[&[int]] = [&vec1, &vec2];

我想要的是明确的:我想表明v包含& [int]项,即对异类大小的数组的引用。但是,无论我如何标记v的类型,我都会遇到编译器错误。以上陈述

tst.rs:8:29: 8:34 error: mismatched types: expected `&[int, ..3]`, found `&[int, ..2]`     (expected array, found array)
tst.rs:8    let v: &[&[int]] = [&vec1, &vec2];
                                       ^~~~~
tst.rs:8:21: 8:35 error: mismatched types: expected `&[&[int]]`, found `[&[int, ..3], ..2]` (expected &-ptr, found array)
tst.rs:8    let v: &[&[int]] = [&vec1, &vec2];
                               ^~~~~~~~~~~~~~

这里有什么解决方案?

1 个答案:

答案 0 :(得分:2)

let vec1 = [1i, 2i, 3i];
let vec2 = [4i, 5i];
let v = [vec1.as_slice(), vec2.as_slice()];
let v: &[&[int]] = v.as_slice();

第一个v的类型为[&[int], ..2],第二个v的类型为&[&[int]]。我们无法直接定义v类型&[&[int]],因为我们必须先为[&[int], ..2]定义存储空间才能借用它。