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 はなんで通るんだろう…?
[ツッコミを入れる]