症状
编译器拒绝返回对本地值的引用,指出该引用会比数据存活更久。这发生在函数创建值并尝试返回其借用,或闭包返回对它所捕获本地值的引用时。数据在函数退出时被丢弃,任何返回的引用都会悬垂,因此检查器阻止它。
诊断
读取被借用的本地;改为返回拥有所有权的值;或从生命周期更长的输入派生引用。
cargo build 2>&1 | head -30
根因
函数会返回一个在其返回时即被丢弃的值的引用,该引用将悬垂,编译器因此拒绝。
修复
返回拥有所有权的值,让调用方决定如何存储;或从生命周期长于调用的输入参数派生返回引用。两者都使所有权显式化并消除悬垂。
验证
重新构建确认错误消失,再跑在调用返回后使用所返回数据的测试。成功使用即证明返回的值或借用有效。
常见陷阱
用 leaking 或 ’static 强行延长生命周期会泄漏内存;应返回拥有所有权的值。