首页 > 其他分享 >[Rust] Intro Lifetimes

[Rust] Intro Lifetimes

时间:2024-04-17 16:24:17浏览次数:23  
标签:nineties releases Lifetimes years i64 Intro let eighties Rust

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;

 

标签:nineties,releases,Lifetimes,years,i64,Intro,let,eighties,Rust
From: https://www.cnblogs.com/Answer1215/p/18129294

相关文章

  • rust和内部可变性模式RefCell<T>
    内部可变性(Interiormutability)是Rust中的一个设计模式,它允许你即使在有不可变引用时也可以改变数据,这通常是借用规则所不允许的。为了改变数据,该模式在数据结构中使用 unsafe 代码来模糊Rust通常的可变性和借用规则。不安全代码表明我们在手动检查这些规则而不是让编译器替......
  • rust引用计数智能指针Rc<T>
    大部分情况下所有权是非常明确的:可以准确地知道哪个变量拥有某个值。然而,有些情况单个值可能会有多个所有者。例如,在图数据结构中,多个边可能指向相同的节点,而这个节点从概念上讲为所有指向它的边所拥有。节点在没有任何边指向它从而没有任何所有者之前,都不应该被清理掉。为了启用......
  • Rust gRPC 开发 todo-demo
    在這篇文章中,我們將使用gRPC創建一個基本的Todo應用程序。首先,我們將非常快速的概述一下gRPC和ProtocolBuffers。什麼是gRPC?gRPC是一個現代的開源的高性能遠程過程調用(RPC)框架,可以在任何環境下運行。RPC代表遠程過程調用(RemoteProcedureCall),開頭的g代表通......
  • 如何在Rust程序项目中安全地使用外部或是项目目录下的文件?
    在开发程序的时候难免会需要在程序中引入外部的文件,为了方便管理我们也常会将这些文件放置在程序项目目录下。然而在代码撰写程序路径于运行阶段读取文件时,文件路径的正确性需要等到运行阶段的时候才会知道,就算写错了而找不到这个文件,程序项目也是能成功通过编译,这就会使得程序在......
  • MIT6.S081 - Lecture1: Introduction and Examples
    课程简介课程目标理解操作系统的设计和实现通过XV6操作系统动手实验,可以扩展或改进操作系统操作系统的目标Abstraction:对硬件进行抽象Multiplex:在多个应用程序之间共用硬件资源Isolation:隔离性,程序出现故障时,不同程序之间不能相互干扰Sharing:实现共享,如数据交互或协......
  • Rust 04
    ///https://kaisery.github.io/trpl-zh-cn/ch03-05-control-flow.html///控制流fnmain(){println!("Hello,world!");letnumber=3;println!("Firstnumberis{number}");letnumber=7;ifnumber<5{println!(......
  • Rust 03
    /**函数体由一系列的语句和一个可选的结尾表达式构成.目前为止,我们提到的函数还不包含结尾表达式,不过作为语句一部分的表达式有一些.因为Rust是一门基于表达式(expression-based)的语言,这是一个需要理解的(不同于其他语言)重要区别.*/fnmain(){println!("Hello,wo......
  • Rust 的 Pin 机制
    背景我相信大多数人在学习Rust异步编程时都会被Futuretrait中的Pin指针感到困惑:pubtraitFuture{typeOutput;fnpoll(self:Pin<&mutSelf>,cx:&mutContext<'_>)->Poll<Self::Output>;}特别是搜索了一圈文档之后,更会对这个Pin一头雾水,彷佛自己也......
  • Rust 02
    fnmain(){println!("Hello,world!");another_function();another_function2(5);print_labeled_measurement(5,'h');}fnanother_function(){println!("Anotherfunction.")}fnanother_function2(x:i32){......
  • Rust 01
    //https://kaisery.github.io/trpl-zh-cn/ch03-02-data-types.htmlfnmain(){println!("Hello,world!");//标量(scalar)类型代表一个单独的值。Rust有四种基本的标量类型:整型、浮点型、布尔类型和字符类型。//你可能在其他语言中见过它们。让我们深入了解它们在......