前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >36.Rust-类型转换

36.Rust-类型转换

原创
作者头像
面向加薪学习
修改2022-09-04 11:52:38
3240
修改2022-09-04 11:52:38
举报
文章被收录于专栏:面向加薪学习

类型转换

Rust 使用 trait 解决类型之间的转换问题。最一般的转换会用到 From 和 Into 两个 trait。

From 和 Into

From 和 Into 两个 trait 是内部相关联的,实际上这是它们实现的一部分。如果我们能够从类型 B 得到类型 A,那么很容易相信我们也能把类型 B 转换为类型 A。

From

From trait 允许一种类型定义 “怎么根据另一种类型生成自己”,因此它提供了一种类型转换的简单机制。在标准库中有无数 From 的实现,规定原生类型及其他常见类型的转换功能。

代码语言:txt
复制
    let s1 = "从0到Go语言微服务架构师";

    let s2 = String::from(s1);

#[derive(Debug)]

struct MyNumber {

    num: i32,

}

impl From<i32> for MyNumber {

    fn from(item: i32) -> Self {

        MyNumber { num: item }

    }

}

fn main() {

    let my\_number = MyNumber { num: 1 };

    println!("{:?}", my\_number);

}

Into

Into trait 就是把 From trait 倒过来而已。也就是说,如果你为你的类型实现了 From,那么同时你也就免费获得了 Into。

使用 Into trait 通常要求指明要转换到的类型,因为编译器大多数时候不能推断它。不过考虑到我们免费获得了 Into,这点代价不值一提。

代码语言:txt
复制
    let spend = 3;

    let my\_spend: MyNumber = spend.into();

    println!("{:?}", my\_spend);

解析字符串

经常需要把字符串转成数字。完成这项工作的标准手段是用 parse 函数。

只要对目标类型实现了 FromStr trait,就可以用 parse 把字符串转换成目标类型。 标准库中已经给无数种类型实现了 FromStr。如果要转换到用户定义类型,只要手动实现 FromStr 就行。

代码语言:txt
复制
let cost: i32 = "5".parse().unwrap();

println!("{}", cost);

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类型转换
    • From 和 Into
      • From
        • Into
          • 解析字符串
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档