[Rust] Intro Lifetimes
The following code has compiler error:
fn jazz(years: &[i64]) -> Releases {
let eighties: [i64] = &years[0..2];
let nineties: [i64] = &years[2..4];
Releases {
years,
eighties,
nineties,
}
}
let releases = {
let all_years: Vec<i64> = vec![
1980, 1985, 1990, 2000, 2005
];
jazz(&all_years)
}; //dealloc(all_years)
let eighties = releases.eighties;
Mainly due to after calling jazz(&all_years)
, Rust dealloc all_years
, later when we try to refer to releases.eighties
, it doesn't exist anymore.
To resolve the problem, we need to intro lifetime to help us to analysis the code:
// Named lifetime as all_years
fn jazz<'all_years>(years: &'all_years [i64]) -> Releases<'all_years> {
let eighties: &'all_years [i64] = &years[0..2];
let nineties: &'all_years [i64] = &years[2..4];
Releases {
years,
eighties,
nineties,
}
}
// lifetime to struct
struct Releases<'years> {
years: &'years [i64],
eighties: &'years [i64],
nineties: &'years [i64],
}
let releases = {
let all_years: Vec<i64> = vec![
1980, 1985, 1990, 2000, 2005
];
jazz(&all_years)
}; //dealloc(all_years)
let eighties = releases.eighties;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2023-04-17 [Typescript] Write clean Type 3 - make a wrapper to cleanup generic usages
2020-04-17 [React Suspense] Lazy load component with React suspense
2019-04-17 [Functional Programming + React] Provide a reasonable default value for mapStateToProps in case initial state is undefined
2019-04-17 [Angular CLI] Build application without remove dist folder for Docker Volume
2019-04-17 [Spring Boot] Introduce to Mockito
2016-04-17 [RxJS] Returning subscriptions from the subscribe function
2016-04-17 [RxJS] Creation operator: create()