rust学习笔记

文章介绍了Rust编程语言中的非词法生命周期(NLL)概念,它决定了变量的生命周期不再由大括号界定,而是基于实际使用。此外,提到了发散类型在错误处理中的作用,以及Rust中函数的默认返回值和编译时执行的常量函数。文章还讨论了结构体`MyCell`及其方法,展示了一个可以修改内部值的实现,探讨了安全性和类型约束。
摘要由CSDN通过智能技术生成

NLL(Non-Lexical-Lifetime)

一个变量的生命周期不再用大括号确定,而是用其从定义开始到最用使用时刻决定。

use std::collections::HashMap;
fn foo()->Vec<char>{
    let mut data=vec!['a','b','c'];
    let slice =&mut data;
    capitalize(slice);
    data.push('a');
    data.push('b');
    data.push('c');
    data

}
fn test_insert(){
    let mut map = HashMap::new();
    map.insert(3,4);
    match map.get_mut(&3){
        Some(value) =>println!("{}",value),
        None => {map.insert(3,5);}
    };
}
fn capitalize(data:&mut Vec<char>){
    data.push('a');
}
fn main(){
    println!("{:?}",foo());
    test_insert();
}

特殊返回类型 发散类型!

发散类型可以转化成任意类型,但是一旦发散类型被使用,程序就寄了。

let p =if x>100{
	panic!("error");	
}else{
	100
}

默认返回值 ()

当不写返回值时,返回值默认为uint().

const fn编译时执行函数

长生存期变量可以缩短会带来的问题


struct MyCell<T>{
    value :T
}
impl<T> MyCell<T>{
    fn new(v:T)->Self where T:Copy{
        MyCell{value:v}
    }
    fn set(&self,v:T)where T:Copy{
        unsafe{
            let p =&(self.value) as *const T as *mut T;
            *p =v;
        }
    }
    fn get(&self)->T where T:Copy{
        self.value
    }
}

fn test(t:&MyCell<&i32>){
    let tmp=1;
    t.set(&tmp);
}
fn main(){
    let t =MyCell::new(&1000i32);
    test(&t);
    println!("{} ",t.get());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值