ys memos

Blog

Rustで&str,String向けメソッドを一度に実装する方法


rust

2024/01/28


Rustでは、文字列を扱う時に &strStringのどちらを使うかがシチュエーションによって異なる。

例えば、Fromトレイトを実装することで、型変換を実装することができる。


以下のようにジェネリクスを設定するとよい。

struct Trimmed(String);

impl<S: AsRef<str>> From<S> for Trimmed {
    fn from(s: S) -> Self {
        Trimmed(s.as_ref().trim().to_owned())
    }
}

impl Trimmed {
    pub fn new<S: AsRef<str>>(s: S) -> Self {
        Trimmed::from(s)
    }
}

fn main() {
    let trimmed = Trimmed::from("  Hello, world!  ");
    assert_eq!(trimmed.0, "Hello, world!");
    let trimmed = Trimmed::new(String::from("  Hello, world!  "));
    assert_eq!(trimmed.0, "Hello, world!");
}

トレイトに対する場合はFromのところを参考にしたらよく、メソッドにはnew()のところを参考にすると良い。



関連タグを探す