了解两次在迭代器上调用方法时如何满足借阅检查器?

风滚草53

在下面的代码中,我了解到通过调用已完成了借用zipped.filter我不了解如何解决此问题,如果以后要zipped再次使用

我是Rust的新手,所以如果这段代码中还有其他问题或对惯用语的奇怪使用,我也对此感兴趣,但主要是关于如何使借用在这里工作两次。

码:

fn main() {
    let data : Vec<String> = vec!["abc".to_string(), "def".to_string(), "bbc".to_string()];

    for s1 in &data {
        for s2 in &data {
            let zipped = s2.chars().zip(s1.chars());

            // Did a diff of the two strings have only one character different?
            if zipped.filter(|(a,b)| a != b).count() == 1 {
                let newStr = zipped.filter(|(a,b)| a == b).map(|(a,_)| a).collect::<String>();

                println!("String without the different character: {}", newStr);
            }
        }
    }
}

错误:

error[E0382]: use of moved value: `zipped`
   --> a.rs:10:30
    |
6   |             let zipped = s2.chars().zip(s1.chars());
    |                 ------ move occurs because `zipped` has type `Zip<Chars<'_>, Chars<'_>>`, which does not implement the `Copy` trait
...
9   |             if zipped.filter(|(a,b)| a != b).count() == 1 {
    |                       ---------------------- `zipped` moved due to this method call
10  |                 let newStr = zipped.filter(|(a,b)| a == b).map(|(a,_)| a).collect::<String>();
    |                              ^^^^^^ value used here after move
    |
note: this function consumes the receiver `self` by taking ownership of it, which moves `zipped`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0382`.
亚历克斯·拉里奥诺夫(Alex Larionov)

您可以始终zipped.clone()克隆克隆迭代器,以便在首次调用时移动克隆filter(...).count()原稿zipped保持不变,您将在第二秒之前移动它filter(...).collect()

请注意,它不会克隆任何数据,因为迭代器是惰性的,复制迭代器意味着复制其逻辑(因此,它复制的逻辑.chars().zip()等等,这只是一堆函数指针,而不是数据)。

fn main() {
    let data : Vec<String> = vec!["abc".to_string(), "def".to_string(), "bbc".to_string()];

    for s1 in &data {
        for s2 in &data {
            let zipped = s2.chars().zip(s1.chars());
            
            // << THE CHANGE IS HERE
            if zipped.clone().filter(|(a,b)| a != b).count() == 1 {
                let newStr = zipped.filter(|(a,b)| a == b).map(|(a,_)| a).collect::<String>();

                println!("String without the different character: {}", newStr);
            }
        }
    }
}

输出:

String without the different character: bc
String without the different character: bc

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何升级我的Slicable特质以满足反复调用中的借阅检查器

来自分类Dev

如何升级我的Slicable特性以满足反复调用中的借阅检查器

来自分类Dev

防止主机侦听器在标签内的div上调用两次

来自分类Dev

当我断开wifi连接时,广播接收器检查互联网连接被调用了两次

来自分类Dev

在迭代器上调用函数

来自分类Dev

如何在Python中的n次迭代器上调用__next__

来自分类Dev

为什么有时在计时器滴答事件中它连续两次调用该方法?

来自分类Dev

如何防止方法被调用两次?

来自分类Dev

方法如何被调用两次?

来自分类Dev

如何在引号内两次使用迭代器!宏?

来自分类Dev

在迭代器上调用地图时如何消除部分移动

来自分类Dev

表示浏览器发出请求时两次调用的中间件函数

来自分类Dev

查询字符串以点结尾时,控制器动作被调用两次

来自分类Dev

htmlentities仅在被调用两次时才能在浏览器上工作

来自分类Dev

当我在选择器中调用 setstate 时,它会将值更改两次

来自分类Dev

困惑的借阅检查器消息

来自分类Dev

使用特征作为类型参数时借阅检查器失败

来自分类Dev

如果客户端断开连接,流星能否在服务器上调用两次方法?

来自分类Dev

为什么在symfony2中两次调用控制器方法

来自分类Dev

流星路由器数据功能被调用两次

来自分类Dev

Angular控制器被调用两次

来自分类Dev

减速器功能被调用两次

来自分类Dev

控制器在AngularJS中被调用两次

来自分类Dev

拦截器在 API 中进行两次调用

来自分类Dev

Apollo 解析器调用了两次?

来自分类Dev

角度控制器调用了两次。如何知道实例化的数量

来自分类Dev

方法被调用两次?

来自分类Dev

当我旋转屏幕时,onCreateView在Fragment上调用了两次

来自分类Dev

如何说服借阅检查器允许我缓存值?

Related 相关文章

  1. 1

    如何升级我的Slicable特质以满足反复调用中的借阅检查器

  2. 2

    如何升级我的Slicable特性以满足反复调用中的借阅检查器

  3. 3

    防止主机侦听器在标签内的div上调用两次

  4. 4

    当我断开wifi连接时,广播接收器检查互联网连接被调用了两次

  5. 5

    在迭代器上调用函数

  6. 6

    如何在Python中的n次迭代器上调用__next__

  7. 7

    为什么有时在计时器滴答事件中它连续两次调用该方法?

  8. 8

    如何防止方法被调用两次?

  9. 9

    方法如何被调用两次?

  10. 10

    如何在引号内两次使用迭代器!宏?

  11. 11

    在迭代器上调用地图时如何消除部分移动

  12. 12

    表示浏览器发出请求时两次调用的中间件函数

  13. 13

    查询字符串以点结尾时,控制器动作被调用两次

  14. 14

    htmlentities仅在被调用两次时才能在浏览器上工作

  15. 15

    当我在选择器中调用 setstate 时,它会将值更改两次

  16. 16

    困惑的借阅检查器消息

  17. 17

    使用特征作为类型参数时借阅检查器失败

  18. 18

    如果客户端断开连接,流星能否在服务器上调用两次方法?

  19. 19

    为什么在symfony2中两次调用控制器方法

  20. 20

    流星路由器数据功能被调用两次

  21. 21

    Angular控制器被调用两次

  22. 22

    减速器功能被调用两次

  23. 23

    控制器在AngularJS中被调用两次

  24. 24

    拦截器在 API 中进行两次调用

  25. 25

    Apollo 解析器调用了两次?

  26. 26

    角度控制器调用了两次。如何知道实例化的数量

  27. 27

    方法被调用两次?

  28. 28

    当我旋转屏幕时,onCreateView在Fragment上调用了两次

  29. 29

    如何说服借阅检查器允许我缓存值?

热门标签

归档