吕清莹 发表于 2025-6-5 15:20:30

rust之map和filter初探。

点击查看代码fn main() {
    let v = vec!;
    let a: Vec<_> = v.iter().filter(|x: &&i32| *x % 2 == 0).map(|x: &i32| x * 2).collect();
    let b: Vec<_> = v.iter().map(|x: &i32| x * 2).filter(|x: &i32| x % 2 == 0).collect();
    println!("{} {}", a, b);
}以上代码是rust圣经的习题代码,可编译通过,习题聚焦于为何`filter(|x: &&i32| *x % 2 == 0)`此处多出俩&&。map的设计哲学是由原来的iter映射出新的iter,故不需要给闭包传递引用,直接传值。其返回值由闭包决定。filter的设计哲学是过滤原生数组,不新增实体,故给闭包传递引用。其返回值由原输入iter决定。再来看iter(),这个东西会生成引用`Iterator`。最后是几个运算符号,*,%,这种基础运算符,标准库里为他们定义了对引用和值的运算,也就是说不必先对单层引用解引用,可以直接用单层引用进行运算。所以唯一需要解引用的地方就是第一个filter,他是双层引用,标准库没有定义双层引用的运算符。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

柏球侠 发表于 2025-10-10 11:51:34

新版吗?好像是停更了吧。

颜清华 发表于 2025-11-10 19:08:08

这个有用。

浅皮懔 发表于 2025-12-20 05:42:01

收藏一下   不知道什么时候能用到

芮梦月 发表于 2025-12-22 23:16:26

很好很强大我过来先占个楼 待编辑

敛饺乖 发表于 2026-1-16 00:56:21

懂技术并乐意极积无私分享的人越来越少。珍惜

轩辕琳芳 发表于 2026-1-16 06:53:32

前排留名,哈哈哈

替攀浮 发表于 2026-1-18 01:19:55

懂技术并乐意极积无私分享的人越来越少。珍惜

章海 发表于 2026-1-18 12:19:02

新版吗?好像是停更了吧。

挽幽 发表于 2026-1-19 01:23:56

感谢分享

郏琼芳 发表于 2026-1-19 13:09:52

感谢分享,下载保存了,貌似很强大

裒噎 发表于 2026-1-21 02:09:29

谢谢分享,试用一下

矛赓宁 发表于 2026-1-21 03:13:25

新版吗?好像是停更了吧。

蒙飘 发表于 2026-1-24 09:58:44

懂技术并乐意极积无私分享的人越来越少。珍惜

郁兰娜 发表于 2026-1-24 13:49:47

不错,里面软件多更新就更好了

愆蟠唉 发表于 2026-1-28 04:44:13

谢谢分享,试用一下

闵雇 发表于 2026-1-28 08:28:32

感谢发布原创作品,程序园因你更精彩

公新蕾 发表于 2026-1-29 02:43:13

热心回复!

酒跚骼 发表于 2026-1-30 23:45:53

感谢分享,下载保存了,貌似很强大

赙浦 发表于 2026-2-4 22:21:44

感谢分享
页: [1] 2
查看完整版本: rust之map和filter初探。