第八章:意动境 · 闭包与迭代的灵动之道
“他人需咏符念咒,我一念而动术;他人遍历千灵,我引灵自来去。”
顾行云望着铺天盖地的灵纹数据,若要逐一施术,岂非精神耗尽?他开始思索:是否能唤出意动即术的技法,让函数式灵气随心而施?
此境,被称为:闭包(closure)与迭代(iterator)之术。
一、闭包术法 · 心念即召咒
闭包是可以捕获环境灵气的“微型法印”:
let double = |x| x * 2; println!("双倍灵力:{}", double(6)); // 输出 12
闭包可有类型,也可由灵器自动推断:
let sum = |a: i32, b: i32| -> i32 { a + b };
他发现闭包可捕获周围灵气变量,实现“无声咒”:
let mut boost = 3; let enhance = |val: i32| val + boost; boost = 5; // 若闭包未立即调用,则变动影响术式行为
修炼提示:
-
若闭包只借用外部灵气 →
&T; -
若需要修改外部灵气 →
&mut T; -
若夺取所有权 →
T(move关键字)
二、迭代灵术 · 万象遍历心识
顾行云学会用 .iter() 唤出“灵迹之流”:
let relics = vec!["火符", "冰珠", "雷骨"]; for item in relics.iter() { println!("发现灵物:{}", item); }
若要加工每个灵物,他使用链式灵术:
let results: Vec<_> = relics .iter() .map(|r| format!("{}・鉴定完毕", r)) .collect();
常用迭代技:
| 灵术名 | 含义 |
|---|---|
.map() |
变换术,灵转其形 |
.filter() |
过滤术,留下精华 |
.find() |
探测术,找出首个满足条件之灵 |
.fold() |
折叠术,从多个灵点汇聚为一 |
.any() / .all() |
判定术,部分/全部满足某条件 |
示例:
let values = vec![10, 20, 30]; let total = values.iter().fold(0, |acc, x| acc + x); // 60
三、闭环炼灵:自定义迭代器
更高阶的术士还可自制迭代灵阵:
struct Counter { count: u32, } impl Iterator for Counter { type Item = u32; fn next(&mut self) -> Option<Self::Item> { self.count += 1; if self.count < 6 { Some(self.count) } else { None } } }
顾行云试炼自制迭代灵脉,掌控步数与终止契机,堪比“灵律编舞”术。
🧘 术式心诀 · 意动之理
咒可省,灵自随;序可化,念自回;动静循环间,术由心生。
⬅️ 上一章 [下一章 待续➡️]