Day4:From & Display & FromStr traits - 100DayOfRust
BC
Posted on November 15, 2019
1, From
trait
After you defined the From
trait, you can convert a type A to B by calling B::from(A)
or B = A.into()
use std::convert::From;
#[derive(Debug)]
struct Number {
num: i32
}
impl From<i32> for Number {
fn from(item: i32) -> Self {
Number {num: item}
}
}
fn main() {
let i = 5;
let num1 = Number::from(i);
let num2: Number = i.into();
println!("num1: {:?}, num2: {:?}", num1, num2);
}
Result:
num1: 5, num2: 5
2, Display
& FromStr
trait
The Display
trait will be used when print an object, e.g. obj.to_string()
or println!("{}", obj)
;
The FromStr
will be used when trying to convert a string to the target object with parse()
method
use std::fmt;
use std::str::FromStr;
use std::num::ParseIntError;
struct Point {
x: i32,
y: i32,
}
impl fmt::Display for Point {
fn fmt(&self, f:&mut fmt::Formatter) -> fmt::Result {
write!(f, "Point ({}, {})", self.x, self.y)
}
}
impl FromStr for Point {
type Err = ParseIntError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let tuple: Vec<&str> = s.split(",").collect();
let x = tuple[0].parse::<i32>()?;
let y = tuple[1].parse::<i32>()?;
Ok(Point {x:x, y:y})
}
}
fn main() {
let p1 = Point {x:1, y:2};
let p2: Point = "3,4".parse().unwrap();
println!("P1: {}\nP2: {}", p1, p2);
}
Result:
P1: Point (1, 2)
P2: Point (3, 4)
💖 💪 🙅 🚩
BC
Posted on November 15, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
tailwindcss Implementing Dark Mode and Theme Switching using Tailwind v4 and Next.js
November 29, 2024