Rustには様々な型があり、「文字を扱う」とカテゴライズするだけでも、&str
String
char
Cow<'_,str>
など様々な型で扱うことができます。
これらを単に比較したり、特定の型に変換する場合は、impl ToString
を使うと簡単に書けます。
例えば、何らかの文字を受け取って、それが同一かどうかを確かめる関数は、以下のように書くことができます。
fn cmp(a: &impl ToString, b: &impl ToString)-> bool{
a.to_string() == b.to_string()
}
こう書くことで、引数a
b
には、ToString
トレイトを実装しているどのような型も受け取ることができます。
※ToString
を実装しているデータ型はこちらを参照
これは、引数aと引数bの型が違う場合に。非常に便利です。
通常、例えばa: &str
とb: char
を比較する場合、a == b.as_str()
など、相手の型に合わせて変換してやる必要があります。
この関数では、&str
String
char
Cow<'_,str>
などは、すべてToString
トレイトを実装していることを利用し、一度String
に変換してやってから比較を行います。
そのため、a
b
それぞれにどのようなデータ型が渡されようが、to_string
を使ってあとは好きに比較なり変換なりすることができます。
Rust上級者の方からすると、Rust的なお作法とは少々異なっているので、色々思うところがあるかもしれませんが、まずは「とにかく動くコード」を書くことが大切です。
メモリ最適化やパフォーマンスの改善は、リファクタリングで行うべきです。
※事実と異なっている部分や、もっと良い方法があれば、コメントにてご指摘ください。