2015-04-03 3 views
1

Я был немного удивлен, что этот код не будет компилироваться. Будучи новой для Руста, возможно я сделал некоторые глупые ошибки, конечно ...Как использовать элемент перечисления как элемент массива?

mod board { 
    enum Square { 
     Empty, 
     Black, 
     White 
    } 

    fn init() -> [Square;9] { 
     [Square::Empty; 9] 
    } 
} 

main.rs:10:9: 10:27 error: the trait core::marker::Copy is not implemented for the type board::Square [E0277] main.rs:10 [Square::Empty; 9]

Или это язык не-функция, которая перечисления не имеют как тип элемента массива?

ответ

6

Синтаксис инициализации массива [T; N] требует, чтобы T реализовал Copy, чтобы он мог скопировать предоставленное значение в каждую позицию в массиве.

Это работает:

mod board { 
    #[derive(Copy)] 
    enum Square { 
     Empty, 
     Black, 
     White 
    } 

    fn init() -> [Square;9] { 
     [Square::Empty; 9] 
    } 
} 

fn main() {} 
+1

Обратите внимание, что мне нужно, чтобы добавить Clone к DERIVE для его работы. '# [Вывести (Копировать, Clone)]' – agmcleod

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