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

【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.dtcms.com/a/38510.html

相关文章:

  • Proof Beyond Boundaries: Hong Kong zkNight 活动精彩回顾
  • 零样本学习 zero-shot
  • LeetCodehot 力扣热题100 全排列
  • 《Keras 3 使用 PointNet 进行点云分类》:此文为AI自动翻译
  • Ubuntu指令(一)
  • SVT-AV1接入ffmpeg说明
  • SSM和SpringBoot有什么区别?
  • Spring 框架学习笔记:从零到精通的 21 个关键点
  • pyautogui库的screenshot()函数
  • python poetry添加某个git仓库的某个分支
  • 学习FreeRTOS推荐几篇质量高的文章
  • 6. grafana的graph简介
  • Android Realm数据库使用与集成指南
  • el-form中使用el-select,下拉框出现错位
  • 【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费
  • 【我的 PWN 学习手札】IO_FILE 之 劫持vtable到_IO_str_jumps
  • LeetCode - 24 两两交换链表中的节点
  • PHP入门基础学习七(函数3)
  • WIn32 笔记:本专栏课件
  • Oracle管理员高级操作的详细步骤说明,涵盖性能优化、安全管理、高可用性配置等核心内容
  • Halcon 3D加快表面匹配速度
  • [深度学习]基于C++和onnxruntime部署yolov12的onnx模型
  • Git add --- error: Filename too long
  • 代码随想录DAY35|01背包问题、416. 分割等和子集
  • DeepSeek开源周Day1:重磅发布FlashMLA,重新定义AI推理效率天花板
  • AI顿悟之旅 - 1 - DeepSeek的训练方法为什么相比GPT-o1大幅度减少算力资源?
  • Windows与Ubuntu安装MySQL
  • Sqlserver安全篇之_隐藏实例功能和禁用SQL Server Browser服务
  • 银河麒麟高级服务器操作系统通用rsync禁止匿名访问操作指南
  • 【STL专题】优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级