https://doc.rust-jp.rs/rust-by-example-ja/conversion/from_into.html
に以下のFromトレイトを使ったユーザ定義型の型変換サンプルコードが出てきますが、お馴染みのString::fromもString型に対して(impl From<&str> for String {~~途中省略~~})とfromを定義しているのでやっていることは同じ、
use std::convert::From;
#[derive(Debug)]
struct Number {
value: i32,
}
impl From for Number {
fn from(item: i32) -> Self {
Number { value: item }
}
}
fn main() {
let num = Number::from(30);
println!("My number is {:?}", num);
}
std::convert::From
トレイトは、
pub trait From: Sized {
// Required method
fn from(value: T) -> Self;
}
のようになっているので、from()にこの例のように個別の実装(impl From
)をしてやれば、自作の型でも型変換ができるようになります。
admin