func (f *FSRS) Repeat Next 这两个算法有什么区别

func (f *FSRS) Repeat Next 这两个算法有什么区别 这两个函数是 FSRS 算法中预览和实际复习的核心入口它们的本质区别如下核心区别维度Repeat()Next()目的查看当前卡片状态获取复习后的新状态是否需要评级❌ 不需要✅ 需要grade是否更新状态❌ 只读操作✅ 会计算新状态返回内容RecordLog当前卡片的完整信息SchedulingInfo复习后的排期信息代码层面的区别go// Repeat: 纯查询不修改状态 func (f *FSRS) Repeat(card Card, now time.Time) RecordLog { return f.scheduler(card, now).Preview() // 预览当前状态 } // Next: 需要用户评级计算未来状态 func (f *FSRS) Next(card Card, now time.Time, grade Rating) SchedulingInfo { return f.scheduler(card, now).Review(grade) // 根据评级更新排期 }使用场景Repeat()适用场景用户打开卡片时显示当前的复习信息展示卡片的记忆状态稳定性、难度、间隔等不涉及用户操作只是展示数据Next()适用场景用户完成复习并给出评级Again/Hard/Good/Easy根据用户表现计算下一次复习时间更新卡片的状态稳定性、难度、间隔、到期日等实际使用流程go// 1. 用户打开卡片 → 查看当前状态 record : fsrs.Repeat(card, time.Now()) // 显示当前稳定性、难度、下次复习时间等 // 2. 用户复习后给出评级 → 计算新状态 result : fsrs.Next(card, time.Now(), RatingGood) // 更新新的稳定性、难度、下次复习时间等 // 3. 保存新状态 card.Stability result.Stability card.Difficulty result.Difficulty card.Due result.NextDue // ... 保存到数据库总结Repeat 现在这张卡片是什么状态只读查询Next 如果用户给了 X 评级未来会怎样计算更新两者配合使用先用Repeat展示用户操作后用Next更新。