当前位置: 首页 > article >正文

【10】RUST的迭代器与闭包

文章目录

    • 闭包(Closures)
    • 定义
    • 捕获方式:
  • 迭代器(Iterator)
    • 核心方法:
    • 创建方式:
    • 适配器(Adapter)
      • 常见适配器及示例
      • 消费方法(Consumer)
    • 所有权与引用处理
    • 性能与惰性求值

闭包(Closures)

类比C++里的lambda表达式

闭包是能够捕获其所在环境变量的匿名函数,支持灵活的类型推断和多种捕获方式。

定义

fn add_one_v1
(x: u32) -> u32 {
    x + 1 }
let add_one_v2 = |x: u32| -> u32 {
    x + 1 };
let add_one_v3 = |x| {
    x + 1 };
let add_one_v4 = |x| x + 1 ;

move || {
    x }; //使用mov关键字强制获取所有权

缺省注解也需要主要,闭包只能应对单一数据类型。

捕获方式:

由编译器根据闭包体自动推断类型:

  • FnOnce(所有闭包一定实现了该trait):获取变量的所有权(仅能调用一次)。
  • Fn:通过不可变借用捕获变量(可多次调用)。
  • FnMut:通过可变借用捕获变量(允许修改外部状态)。

迭代器(Iterator)

迭代器是实现了 Iterator trait 的类型,用于逐个访问集合中的元素。

核心方法:

next(&mut self) -> Option<Self::Item>:返回下一个元素,若没有则返回 None。

创建方式:

iter():生成元素的不可变引用(&T)。
iter_mut():生成元素的可变引用(&mut T)。
into_iter():获取元素的所有权(消耗集合)。
示例:

let vec = vec![1, 2, 3];
let mut iter = vec.iter(); // 不可变引用迭代器
assert_eq!(iter.next(), Some(&1

http://www.kler.cn/a/563548.html

相关文章:

  • 【docker】namespace底层机制
  • 在线会议时, 笔记本电脑的麦克风收音效果差是为什么
  • C/C++ | 每日一练 (4)
  • APNG格式图片文件大小优化方案 转WEBP
  • seacmsv9报错注入管理员账号密码,order by 注入,如何解决 information_schema关键字被过滤掉了
  • ElasticSearch核心技术解析:倒排索引与IK分词器如何解决中文搜索痛点
  • MySQL四种备份表的方式
  • 阿里云可观测全面拥抱 OpenTelemetry 社区
  • Android JNI开发指南
  • 【京准时钟】网络时间同步服务器对数据库的重要性
  • PYQT学习笔记-从简单窗口到多功能主窗口的实现
  • vllm的使用方式,入门教程
  • C#异步编程之async与await
  • 选择排序(Selection Sort)详细教程:Java实现与优化
  • 基于spring boot的失恋博物馆管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • [ComfyUI]官方已支持Skyreels混元图生视频,速度更快,效果更好(附工作流)
  • 网络应用层之HTTPS
  • [python脚本]论文1.(一)CPU/内存数据分析和分组
  • 数据结构——排序3
  • Docker 核心技术全解析:从容器化到生产部署