在迭代器上使用过滤器时,为什么会得到不同的参数类型?

柠檬

我正在使用filter,但是我不明白为什么我应该使用**x > 1切片但使用*x > 1范围。

fn main() {
    let a = [0, 1, 2, 3];
    let a_iter = a.iter().filter(|x: &&i32| **x > 1);  // x: &&i32
    let x: Vec<&i32> = a_iter.collect();
    println!("{:?}", x);

    let b = 0..4;
    let b_iter = b.filter(|x: &i32| *x > 1);           // x: &i32
    let y: Vec<i32> = b_iter.collect();
    println!("{:?}", y);
}

医生说应该是**x > 1

椒盐脆饼

slice::iter,例如a.iter()您的示例,在对值的引用上生成一个迭代器。Ranges是产生非参考值的迭代器。

filter(<closure>)方法采用一个<closure>按引用获取迭代器值方法,因此,如果您的迭代器已经生成了引用,则您将获得对引用的引用,如果迭代器生成了非引用值,则将获得对这些值的引用。

如果我们Vec在两个示例中都使用a 则区别变得更容易理解

fn main() {
    let a = vec![0, 1, 2, 3];
    let a_iter = a.iter(); // iter() returns iterator over references
    let x: Vec<&i32> = a_iter.filter(|x: &&i32| **x > 1).collect();
    println!("{:?}", x);

    let b = vec![0, 1, 2, 3];
    let b_iter = a.into_iter(); // into_iter() returns iterator over values
    let y: Vec<i32> = b_iter.filter(|x: &i32| *x > 1).collect();
    println!("{:?}", y);
}

操场

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在过滤器中使用 if 语句作为反对只返回时会得到不同的输出

来自分类Dev

Odata 不能使用过滤器。为什么?

来自分类Dev

为什么“return s and s.strip()”在使用过滤器时起作用?

来自分类Dev

当使用相似的逻辑递增两种不同的指针类型时,为什么会得到不同的地址?

来自分类Dev

无法在pyspark中的可迭代RDD上使用过滤器

来自分类Dev

为什么从未调用过滤器链?

来自分类Dev

为什么使用过滤器计算会返回此结果?

来自分类Dev

为什么在 lambda 表达式中使用过滤器时会出现错误?

来自分类Dev

如何使用过滤器缩小类型?

来自分类Dev

使用过滤器时{}和()有什么区别?

来自分类Dev

使用ViewState在Listview上应用过滤器

来自分类Dev

在 couchDB 上使用过滤器不起作用

来自分类Dev

使用过滤器 knp 分页器进行分页

来自分类Dev

使用过滤器时如何输出变量?

来自分类Dev

使用过滤器时CSS过渡模糊

来自分类Dev

全选时如何使用过滤器

来自分类Dev

使用过滤器时的重复绝对$索引

来自分类Dev

当我使用 sp_executesql 运行查询时,为什么会得到不同的行顺序?

来自分类Dev

Swift:使用过滤器函数进行过滤后,调用indexOf时无法将类型的值转换为@noescape

来自分类Dev

为什么使用withMutations会得到不同的结果?

来自分类Dev

在列表上使用for循环时,为什么会得到重复的输出?

来自分类Dev

在使用ng-repeat创建动态HTML表列时,基于变量类型应用过滤器

来自分类Dev

使用过滤器遍历列表

来自分类Dev

使用过滤器代替foreach

来自分类Dev

使用过滤器更新角度?

来自分类Dev

使用过滤器分组

来自分类Dev

为什么创建过滤器时 CITemperatureAndTint 的参数键会引发 NSUnknownKeyException 错误?

来自分类Dev

当对Ember Data使用过滤器时,对象上的EmberJS“ set”方法似乎不起作用

来自分类Dev

如何使用来自不同控制器的参数触发过滤器功能

Related 相关文章

  1. 1

    为什么在过滤器中使用 if 语句作为反对只返回时会得到不同的输出

  2. 2

    Odata 不能使用过滤器。为什么?

  3. 3

    为什么“return s and s.strip()”在使用过滤器时起作用?

  4. 4

    当使用相似的逻辑递增两种不同的指针类型时,为什么会得到不同的地址?

  5. 5

    无法在pyspark中的可迭代RDD上使用过滤器

  6. 6

    为什么从未调用过滤器链?

  7. 7

    为什么使用过滤器计算会返回此结果?

  8. 8

    为什么在 lambda 表达式中使用过滤器时会出现错误?

  9. 9

    如何使用过滤器缩小类型?

  10. 10

    使用过滤器时{}和()有什么区别?

  11. 11

    使用ViewState在Listview上应用过滤器

  12. 12

    在 couchDB 上使用过滤器不起作用

  13. 13

    使用过滤器 knp 分页器进行分页

  14. 14

    使用过滤器时如何输出变量?

  15. 15

    使用过滤器时CSS过渡模糊

  16. 16

    全选时如何使用过滤器

  17. 17

    使用过滤器时的重复绝对$索引

  18. 18

    当我使用 sp_executesql 运行查询时,为什么会得到不同的行顺序?

  19. 19

    Swift:使用过滤器函数进行过滤后,调用indexOf时无法将类型的值转换为@noescape

  20. 20

    为什么使用withMutations会得到不同的结果?

  21. 21

    在列表上使用for循环时,为什么会得到重复的输出?

  22. 22

    在使用ng-repeat创建动态HTML表列时,基于变量类型应用过滤器

  23. 23

    使用过滤器遍历列表

  24. 24

    使用过滤器代替foreach

  25. 25

    使用过滤器更新角度?

  26. 26

    使用过滤器分组

  27. 27

    为什么创建过滤器时 CITemperatureAndTint 的参数键会引发 NSUnknownKeyException 错误?

  28. 28

    当对Ember Data使用过滤器时,对象上的EmberJS“ set”方法似乎不起作用

  29. 29

    如何使用来自不同控制器的参数触发过滤器功能

热门标签

归档