Rust从入门到实战系列三百零二:其它转换

将任何类型转换成 String
只要为一个类型实现了 ToString ,就可以将任何类型转换成 String 。事实上,这种方式并不是最好
的,大家还记得 fmt::Display 特征吗?它可以控制一个类型如何打印,在实现它的时候还会自动实现
ToString 。

  1. 🌟🌟
    use std::fmt;
    struct Point {
    x: i32,
    y: i32,
    }
    impl fmt::Display for Point {
    // 实 现 fmt 方 法
    }
    fn main() {
    let origin = Point { x: 0, y: 0 };
    // 填 空
    assert_eq!(origin., “The point is (0, 0)”);
    assert_eq!(format!(
    ), “The point is (0, 0)”);
    println!(“Success!”)
    }
    解析 String
  2. 🌟🌟🌟 使用 parse 方法可以将一个 String 转换成 i32 数字,这是因为在标准库中为 i32 类型
    实现了 FromStr : : impl FromStr for i32
    // 为 了 使 用 from_str 方 法, 你 需 要 引 入 该 特 征 到 当 前 作 用 域 中
    use std::str::FromStr;
    fn main() {
    let parsed: i32 = “5”..unwrap();
    let turbo_parsed = “10”.
    .unwrap();
    let from_str = __.unwrap();
    let sum = parsed + turbo_parsed + from_str;
    assert_eq!(sum, 35);
    println!(“Success!”)
    }
  3. 🌟🌟 还可以为自定义类型实现 FromStr 特征
    use std::str::FromStr;
    use std::num::ParseIntError;
    #[derive(Debug, PartialEq)]
    struct Point {
    x: i32,
    y: i32
    }
    impl FromStr for Point {
    type Err = ParseIntError;
    fn from_str(s: &str) -> Result<Self, Self::Err> {
    let coords: Vec<&str> = s.trim_matches(|p| p == ‘(’ || p == ‘)’ )
    .split(‘,’)
    .collect();
    let x_fromstr = coords[0].parse::()?;
    let y_fromstr = coords[1].parse::()?;
    Ok(Point { x: x_fromstr, y: y_fromstr })
    }
    }
    fn main() {
    // 使 用 两 种 方 式 填 空
    // 不 要 修 改 其 它 地 方 的 代 码
    let p = __;
    assert_eq!(p.unwrap(), Point{ x: 3, y: 4} );
    println!(“Success!”)
    }
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值