🦀
【Rust】関数の引数でString/&strどちらでも受け取れるようにする。
Rust関数の引数にStringや&strをどちらでも対応したい場合の実装方法を紹介
サンプルコード
fn echo<T: Into<String>>(
value: T,
) {
let value = value.into(); // String
println!(value);
}
fn main(){
echo("&str");
echo("String".to_string());
}
やってること
RustにはtraitでFrom/Intoを実装することで、構造体を明示的に変換することができます。
イメージとしてはUserをStringに変換したいときに、Into<String>を定義することで振る舞い定義することができます。
struct User{
name: String
}
impl Into<String> for User {
fn into(self) -> String {
self.name.to_string()
}
}
fn main(){
let user = User{name:"rust".to_string()};
let name:String = user.into();
println!(name);
}
Intoを上手く使うことで複数の構造体をまとめて受け取れる関数を実装することが可能です。
Discussion