2
1

More than 1 year has passed since last update.

Rustで、&str, String, char関係なく「とにかく文字を受け取る」関数を作るには、impl ToStringを使おう

Last updated at Posted at 2023-07-22

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: &strb: charを比較する場合、a == b.as_str()など、相手の型に合わせて変換してやる必要があります。

この関数では、&str String char Cow<'_,str>などは、すべてToStringトレイトを実装していることを利用し、一度Stringに変換してやってから比較を行います。

そのため、a bそれぞれにどのようなデータ型が渡されようが、to_stringを使ってあとは好きに比較なり変換なりすることができます。

Rust上級者の方からすると、Rust的なお作法とは少々異なっているので、色々思うところがあるかもしれませんが、まずは「とにかく動くコード」を書くことが大切です。

メモリ最適化やパフォーマンスの改善は、リファクタリングで行うべきです。

※事実と異なっている部分や、もっと良い方法があれば、コメントにてご指摘ください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1