如何在Rust中映射数组引用

时间:2018-11-30 17:01:13

标签: arrays rust iterator

我有这个数组

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 :(得分:3)

类型&[T]没有map方法。如果您看到错误消息,则表示存在一个名为map的方法,但该方法不适用于&mut &[u8]&mut [u8],因为这些类型不能实现{{1} } *。数组和其他集合通常具有用于创建迭代器的一个或一组方法。对于切片或数组,可以选择Iterator(在引用上迭代)或iter()(在移动的值上迭代并使用源集合)。

通常,您还希望将这些值收集到其他集合中:

into_iter()

*这些类型与代码中的类型有所不同(它们是可变的),表明产生此错误的代码与您在问题中所呈现的代码有些不同。