Rust 加 AI 学习效率翻倍:把学到的概念马上用 AI 生成练习题验证

发布时间:2026/7/17 16:25:23
Rust 加 AI 学习效率翻倍:把学到的概念马上用 AI 生成练习题验证 Rust 加 AI 学习效率翻倍把学到的概念马上用 AI 生成练习题验证一、学习闭环文档 → 笔记 → 练习 → 验证 → 巩固传统的学习方式是看文档 → 看示例 → 以为自己懂了但这个以为往往是错觉。我现在的流程是第一步读文档做笔记。用自己的语言复述概念不是复制粘贴。比如学完 Rust 的Dereftrait 后我的笔记长这样// 我的笔记Deref 的作用 // 1. 让智能指针像普通引用一样使用*ptr 等价于 *ptr.deref() // 2. 隐式 Deref 强制转换BoxString 可以自动转成 str // 3. 注意Deref 不能反过来不能从 str 得到 BoxString第二步让 AI 出题。使用以下 prompt我刚学完 Rust 的 Deref trait请出 5 道由浅入深的练习题每道题要考察不同的使用场景。格式要求题目描述中文预期的考察点不给我答案只给题目难度从基础语法到实际工程场景递增。AI 给出了这样的题目题号题目简述考察点1为自定义结构体实现 Deref使其可以被解引用Deref trait 基本实现2写一个函数接受 str传 BoxString 看能否自动转换Deref 强制转换3实现一个包装器 MyStr 同时实现 Deref 和 DerefMut可变 vs 不可变 Deref4解释为什么*x在不同上下文可能调用不同方法方法解析与 Deref5设计一个配置覆盖结构用 Deref 实现层叠配置工程场景应用二、写题实践我的解题代码和 AI 点评以下是第 3 题的实践过程AI 出的题目实现一个MyStr结构体包装String实现Deref不可变借用和DerefMut可变借用然后在代码中演示两者的区别。我写的代码use std::ops::{Deref, DerefMut}; /// 自定义字符串包装器 —— 实践中可能用于添加额外元数据 struct MyStr { inner: String, // 实际存储的字符串数据 modified_count: u32, // 记录被修改的次数演示用途 } impl MyStr { fn new(s: str) - Self { Self { inner: s.to_string(), modified_count: 0, } } /// 获取修改次数 —— 通过 Deref 只能访问 inner不能访问这个字段 fn modification_count(self) - u32 { self.modified_count } } // 实现不可变解引用MyStr → String → str impl Deref for MyStr { type Target String; // 指定解引用后的目标类型 fn deref(self) - Self::Target { self.inner // 返回内部 String 的引用 } } // 实现可变解引用mut MyStr → mut String impl DerefMut for MyStr { fn deref_mut(mut self) - mut Self::Target { self.modified_count 1; // 记录修改次数 mut self.inner // 返回内部 String 的可变引用 } } fn main() { let mut my MyStr::new(hello); // 测试 1不可变 Deref —— 可以调用 String 的方法 // str_len 的类型是 String但可以自动解引用为 str let str_len my.len(); // 实际调用 my.deref().len() println!(长度: {}, str_len); // 测试 2可变 DerefMut —— 可以调用 String 的 mut 方法 my.push_str( world!); // 实际调用 my.deref_mut().push_str(...) println!(修改后: {}, my.deref()); // 打印 hello world! println!(修改次数: {}, my.modification_count()); // 输出: 1 // 测试 3Deref 强制转换 fn takes_str(s: str) { println!(收到 str: {}, s); } takes_str(my); // MyStr 自动 Deref 为 String再 Deref 为 str }AI 的点评整体实现正确Deref/DerefMut的核心逻辑没问题。几点改进建议Deref的Target设为String没问题但实践中更常见的是设为str直接解引用为字符串切片减少一层间接访问。可以试试把Target改为str看看deref方法需要怎么改。你在deref_mut里加了modified_count 1这个副作用这个设计在实际项目中要注意DerefMut 应该是透明的不推荐在解引用时产生副作用因为这会让代码行为变得难以预测。建议把修改计数放到专门的 setter 方法里。可以补充一个测试当MyStr被不可变借用时my能否调用push_str为什么我的心得AI 的点评帮我发现了一个我自己意识不到的问题——在设计 trait 实现时引入副作用。这种隐性知识是靠看书很难获得的需要有人指出才能意识到。三、练习题的分类和设计原则经过几十次这样的练习我发现 AI 出题的质量很大程度上取决于你的 prompt。好的 prompt 需要明确/// 我的AI 出题请求模板 fn build_exercise_prompt(topic: str, difficulty_areas: [str]) - String { format!( 我刚学完 Rust 的「{topic}」请出 4 道练习题。 要求 1. 难度梯度基础语法 → 常见陷阱 → 实际工程场景 → 与其他概念的交叉 2. 每道题标注考察的特定能力{areas} 3. 工程场景要真实比如写一个 HTTP 请求解析器用到了 X 4. 不要给答案 请用你实际遇到过的问题来启发题目设计。, topic topic, areas difficulty_areas.join(、), ) } // 使用示例 let prompt build_exercise_prompt( 生命周期标注, [函数签名标注, 结构体生命周期, 协变逆变, 更高阶生命周期], );我总结的有效的练习梯度四、学习效率的实测对比为了验证这套方法的效果我用同样的时间每天 2 小时持续 1 周对比了纯看书和我这种方法在Rust 的 async/await 和 Future 概念上的学习效果对比维度纯看书看博客看书AI 出题练习看完资料的时间3 天2 天练习题完成量0没找到合适的题15 题能独立写出异步代码第 5 天第 3 天遇到编译错误的平均解决时间15 分钟5 分钟一周后概念遗忘率约 40%约 15%最关键的区别是被动阅读的知识留存率远低于主动练习。AI 生成练习题让我在学完的 10 分钟内就开始主动输出而不是被动接收。五、总结这套方法的核心就三点用自己的话复述——不做笔记的学习等于没学。让 AI 出题不给答案——AI 是出题工具不是抄答案的工具。自己动手做比看 AI 写的答案有效 10 倍。把自己的代码发给 AI 点评——AI 能发现你自己意识不到的问题比如编码风格、边界条件、工程实践。作为程序员我知道自己在基础理论上有短板。但这些短板不是不可弥补的——关键是有没有一套高效的学习方法。AI 帮不了你理解概念那是你自己的事但它可以帮你加速学习 → 练习 → 验证这个闭环而这个闭环才是编程学习的本质。希望这套方法对同样在自学 Rust 的朋友有帮助。一起加油。