当前位置: 首页 > 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

相关文章:

  • 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管理员高级操作的详细步骤说明,涵盖性能优化、安全管理、高可用性配置等核心内容
  • “水运江苏”“航运浙江”,江浙两省为何都在发力内河航运?
  • 2025上海科技节本周六启幕,机器人和科学家同走AI科学红毯
  • 比特币挖矿公司GRYP股价涨超171%:将与特朗普儿子创设的公司合并
  • 人大新闻教育70年丨16759门课程里的时代密码
  • 人民空军:网上出现的“运-20向外方运送物资”为不实消息
  • “海豚音”依旧互动更多,玛丽亚·凯莉本周来沪开唱