不匹配的类型`[int]`vs` [int,.. 0]`

时间:2014-09-08 18:25:11

标签: rust

我在Rust遇到问题我还没有找到答案:

mismatched types: expected `[int]`, found `[int, .. 0]`

我的代码如下:

struct Foo {
  bar: [int]
}

我试图将其设置为空片:

Foo {
  bar: []
};

类型应该是正确的,但可能尺寸不是。

有什么想法吗?我怀疑它有点小。

1 个答案:

答案 0 :(得分:4)

在正确实现动态大小的类型之前,您不能将裸[T]用作结构字段,即使它们将被实现,您也可能不会想要它。

似乎你想将数组存储到结构中,对吧?在Rust中有两种方法可以做,具体取决于谁拥有数组内容。

当struct实例本身应该拥有数据时,最简单的方法是使用Vec<T>

struct Foo {
    bar: Vec<int>
}

您可以像这样创建其实例:

Foo {
    bar: vec![1, 2, 3]
}

当struct实例只应借用数据时,您应该使用切片&[T]

struct Foo<'a> {
    bar: &'a [int]   // or &'a mut [int] if you need to modify contents
}

然后你就像这样创建它:

let data: Vec<int> = ...;  // obtained from somewhere
// slices can only be taken from existing data, e.g. Vec<T>, or be &'static
Foo {
    bar: data.as_slice()   // or as_mut_slice() for &mut [int]
}

我真的建议你阅读优秀的official guide,它解释了拥有的矢量和切片之间的区别以及更多的东西。