2014-09-08 3 views
1

я столкнулся вопрос в Русте я еще не нашел ответа на:Несовпадение типа `[Int]` `против [ИНТ, .. 0]`

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

Мой код выглядит следующим образом:

struct Foo { 
    bar: [int] 
} 

И я пытаюсь установить его в пустой срезе:

Foo { 
    bar: [] 
}; 

типы должны быть правы, но, возможно, размер не является.

Любые идеи? Я подозреваю, что это что-то малое.

ответ

4

До динамического размера типов не реализуются должным образом, вы не можете использовать голую [T] как поле структуры, и даже тогда, когда они будут реализованы, то вы, вероятно, не хотели бы это.

Кажется, вы хотите сохранить массив в структуру, правильно? Есть два способа сделать это в Rust, в зависимости от того, кто владеет содержимым массива.

Когда сам экземпляр структуры должен владеть данными, то самый простой способ заключается в использовании Vec<T>:

struct Foo { 
    bar: Vec<int> 
} 

Вы создаете свой экземпляр, как это:

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

Когда экземпляр структуры должен только заимствовать данные, вы должны использовать ломтик, :

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 что объясняет разницу между векторами и принадлежащей долькой и многими другими вещами.

Смежные вопросы