[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;

 

posted @   Zhentiw  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源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()
点击右上角即可分享
微信分享提示