我在Rust遇到问题我还没有找到答案:
mismatched types: expected `[int]`, found `[int, .. 0]`
我的代码如下:
struct Foo {
bar: [int]
}
我试图将其设置为空片:
Foo {
bar: []
};
类型应该是正确的,但可能尺寸不是。
有什么想法吗?我怀疑它有点小。
答案 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,它解释了拥有的矢量和切片之间的区别以及更多的东西。