トップ «前の日記 最新 次の日記»

2022-07-08 (Fr) [長年日記]

_ Rust 勉強

関係性だけ抽出してみた。

pub trait DictionaryAccess {
}

struct JapaneseDictionary {
}

impl DictionaryAccess for JapaneseDictionary {
}

impl Clone for JapaneseDictionary {
    fn clone(&self) -> JapaneseDictionary {
        JapaneseDictionary{}
    }
}

pub struct AnalyzeNonSplitted<D: DictionaryAccess> {
    d: D,
}

impl<D: DictionaryAccess + Clone> AnalyzeNonSplitted<D> {
    pub fn new(dict: D) -> Self {
        Self {
            d: dict,
        }
    }
}

fn main() {
    let d = JapaneseDictionary{};
    AnalyzeNonSplitted::<JapaneseDictionary>::new(d);
}

ちゃんと通る。

main の2行目を参照にすると、コンパイラがエラーを吐く。

    AnalyzeNonSplitted::<JapaneseDictionary>::new(&d);
luna:rstest % cargo run
   Compiling rstest v0.1.0 (/home/masm/src/rstest)
error[E0308]: mismatched types
  --> src/main.rs:30:51
   |
30 |     AnalyzeNonSplitted::<JapaneseDictionary>::new(&d);
   |                                                   ^^ expected struct `JapaneseDictionary`, found `&JapaneseDictionary`
   |
help: consider removing the borrow
   |
30 -     AnalyzeNonSplitted::<JapaneseDictionary>::new(&d);
30 +     AnalyzeNonSplitted::<JapaneseDictionary>::new(d);
   | 

そりゃそうだよなぁ。 これを通されたらかなわんわ。

あぁ良かった。

じゃぁ sudachi はなんで通るんだろう…?


編集 パスワード変更