swift には多数のprotocolが定義されており、これを理解し有効に活用することで、読みやすいコードを書くことができる。
rustにも同じように多数のtraitが定義されている。swiftに比べて、かなり多くのtraitが定義されているが、
マイナー言語ゆえに、日本語の解説書もなかなか出なさそうなので、ちまちまとメモしていく。
Hash
pub trait Hash { fn hash<H>(&self, state: &mut H) where H: Hasher; } pub trait Hasher { fn finish(&self) -> u64; fn write(&mut self, bytes: &[u8]); }
Hasher トレイトはハッシュ関数の実装を要求していることが分かる。
hashトレイトの一つ目の関数hash()は、呼び出すことによって、自身のデータでhasher関数Hのwrite()を呼び出させる。
ハッシュ関数の実装と、データ型をうまく分離したトレイトのようだ。
例えば、Sha256はHasherトレイトを使い、ハッシュ化する元の型(例えばトランザクションデータなど)はHash