rust学习笔记(3)

变量

  • 变量默认是不可变的
  • 不能使用没有初始化的变量

作用域

变量离开作用域之后会直接释放, 无法再次使用; 在内部代码块中定义的变量会导致外部的变量被遮蔽

类型转换

部分类型可以隐式转换, 部分类型需要使用 as 手动显式转换

    let num_u32 = 100u32;
    let num_i64 = num_u32 as i64;

From和Into

实现对应的接口可以方便进行类型转换.

From和Into的函数接口是自动推断和相互转换的, 所以, 只需要实现From接口的from函数即可

struct Number {
    value: i32,
}

impl From<i32> for Number {
    fn from(value: i32) -> Self {
        Number { value }
    }
}

fn main() {
    let number: Number = 42.into();
    println!("The number is {}", number.value);
}

TryFrom和TryInto

当进行类型转换的时候, 可能出现类型不能转换的情况, 这个时候会抛出异常, 异常需要被处理, 所以, 应该使用 Result 作为返回值被接受

impl TryFrom<i32> for EvenNumber {
    type Error = ();

    fn try_from(value: i32) -> Result<Self, Self::Error> {
        if value % 2 == 0 {
            Ok(EvenNumber(value))
        } else {
            Err(())
        }
    }
}

to_string和from_string

实现了 Display 的接口之后的默认也是实现了 to_string 的方法

变量传递

使用 & 传递变量的引用

类型推断

根据变量如何使用和变量初始化时候的赋值自动推断

表达式计算变量

可以在 {} 中编写表达式, 计算出来的结果会被赋值给变量

fn main() {
    let x = 5u32;

    let y = {
        let x_squared = x * x;
        let x_cube = x_squared * x;

        // 将此表达式赋给 `y`
        x_cube + x_squared + x
    };

    let z = {
        // 分号结束了这个表达式,于是将 `()` 赋给 `z`
        2 * x;
    };

    println!("x is {:?}", x);
    println!("y is {:?}", y);
    println!("z is {:?}", z);
}

这里的最后一个语句是一个表达式, 而不是完整的代码语句, 并且不能携带 ; , 不然会被赋值为 ()

posted @   xuhe2  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示