トップ 最新

かってきままな日々

2022-07-07 (Th) [長年日記]

_ Rust

昨日の件は、 型の推論に惑わされて辞書の参照を渡してたのが問題だったっぽい。 所有権を渡すつもりで引数渡したら大丈夫みたい。

ただ、今度は辞書の clone どうしよう問題にぶちあたる… JapaneseDictionary が Clone trait を実装してないのは何故??

いや、sudachi-cli がちゃんと動いてるんだからいけるはずか。

んー?

main.rs から AnalyzeSplitted::new にも AnalyzeNonSplitted::new にも 辞書の参照を渡してる。

AnalyzeSplitted::new は辞書の参照を受け取る。 それを AnalyzeNonSplitted::new にそのまま渡す。 つまり AnalyzeNonSplitted::new は参照を受けるはず。

ここまでは良い。が、

実際の AnalyzeNonSplitted::new は参照ではなく辞書そのものを受け取るように 書かれてる。

…どゆこと?

fn type_of<T>(r: T) -> T {
  let a = std::any::type_name::<T>();
  println!("{}", a.to_string());
  r
}

こんな関数を突っ込んで、

let dict = type_of(dict);

こんな感じで呼び出してみた。

確かに参照だなぁ…

というか、そもそもなんで StatefulTokenizer::create は 辞書の参照でも実体でも受け取れるの?