Как отобразить ссылку на массив в Rust - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть этот массив

let buffer: &[u8] = &[0; 40000];

Но когда я хочу отобразить его следующим образом:

*buffer.map( |x| 0xff);

У меня появляется следующая ошибка:

error[E0599]: no method named `map` found for type `&[u8]` in the current scope   
     --> src/bin/save_png.rs:12:13
    | 
 12 |     *buffer.map( |x| 0xff); //.map(|x| 0xff);
    |             ^^^
    |
    = note: the method `map` exists but the following trait bounds were not satisfied:
            `&mut &[u8] : std::iter::Iterator`
            `&mut [u8] : std::iter::Iterator`

Я пробовал несколько способов сделать элементы изменяемыми, но я не могу получить правильный синтаксис.У кого-нибудь есть опыт?Я пытаюсь работать с буфером изображений png.

1 Ответ

0 голосов
/ 30 ноября 2018

Тип &[T] не имеет метода map.Если вы посмотрите на сообщение об ошибке, это говорит о том, что метод с именем map существует, но он не будет работать для &mut &[u8] или &mut [u8], потому что эти типы не реализуют Iterator*.Массивы и другие коллекции обычно имеют метод или набор методов для создания итератора.Для среза или массива у вас есть выбор: iter() (итерация по ссылкам) или into_iter() (итерация по перемещенным значениям и использование исходной коллекции).

Обычно вам также понадобитсячтобы собрать значения в какую-то другую коллекцию:

let res: Vec<u8> = buffer
    .iter()
    .map(|x| 0xff)
    .collect();

* Эти типы немного отличаются от вашего кода (они изменчивы), предполагая, что код, вызывающий эту ошибку, немного отличаетсяиз того, что вы представили в своем вопросе.

...