找回密码
 立即注册
首页 业界区 业界 Rust修仙之道 第八章:意动境 · 闭包与迭代的灵动 ...

Rust修仙之道 第八章:意动境 · 闭包与迭代的灵动之道

暴灵珊 2025-7-9 19:38:38
第八章:意动境 · 闭包与迭代的灵动之道

“他人需咏符念咒,我一念而动术;他人遍历千灵,我引灵自来去。”
顾行云望着铺天盖地的灵纹数据,若要逐一施术,岂非精神耗尽?他开始思索:是否能唤出意动即术的技法,让函数式灵气随心而施?
此境,被称为:闭包(closure)与迭代(iterator)之术
一、闭包术法 · 心念即召咒

闭包是可以捕获环境灵气的“微型法印”:
  1. let double = |x| x * 2;
  2. println!("双倍灵力:{}", double(6)); // 输出 12
复制代码
闭包可有类型,也可由灵器自动推断:
  1. let sum = |a: i32, b: i32| -> i32 { a + b };
复制代码
他发现闭包可捕获周围灵气变量,实现“无声咒”:
  1. let mut boost = 3;
  2. let enhance = |val: i32| val + boost;
  3. boost = 5; // 若闭包未立即调用,则变动影响术式行为
复制代码
修炼提示:

  • 若闭包只借用外部灵气 → &T;
  • 若需要修改外部灵气 → &mut T;
  • 若夺取所有权 → T(move 关键字)
二、迭代灵术 · 万象遍历心识

顾行云学会用 .iter() 唤出“灵迹之流”:
  1. let relics = vec!["火符", "冰珠", "雷骨"];
  2. for item in relics.iter() {
  3.     println!("发现灵物:{}", item);
  4. }
复制代码
若要加工每个灵物,他使用链式灵术:
  1. let results: Vec<_> = relics
  2.     .iter()
  3.     .map(|r| format!("{}・鉴定完毕", r))
  4.     .collect();
复制代码
常用迭代技:
灵术名含义.map()变换术,灵转其形.filter()过滤术,留下精华.find()探测术,找出首个满足条件之灵.fold()折叠术,从多个灵点汇聚为一.any() / .all()判定术,部分/全部满足某条件示例:
  1. let values = vec![10, 20, 30];
  2. let total = values.iter().fold(0, |acc, x| acc + x); // 60
复制代码
三、闭环炼灵:自定义迭代器

更高阶的术士还可自制迭代灵阵:
  1. struct Counter {
  2.     count: u32,
  3. }
  4. impl Iterator for Counter {
  5.     type Item = u32;
  6.     fn next(&mut self) -> Option<Self::Item> {
  7.         self.count += 1;
  8.         if self.count < 6 {
  9.             Some(self.count)
  10.         } else {
  11.             None
  12.         }
  13.     }
  14. }
复制代码
顾行云试炼自制迭代灵脉,掌控步数与终止契机,堪比“灵律编舞”术。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册