🍕
Rustのトレイトはプリミティブ型にも実装できる
Rustのトレイトはあらゆる型に実装でき、プリミティブ型も例外ではありません。
以下はプリミティブ型のusizeにtimesメソッドを生やすべく、Timesトレイトを定義、実装する例です。
trait Times {
fn times<F: FnMut()>(self, f: F);
}
impl Times for usize {
fn times<F: FnMut()>(self, mut f: F) {
(0..self).for_each(|_| f());
}
}
fn main() {
10.times(|| println!("ピザ"));
}
こんな出力になります。
ピザ
ピザ
ピザ
ピザ
ピザ
ピザ
ピザ
ピザ
ピザ
ピザ
既存の型にメソッドを生やせるのはRubyのオープンクラスみたいですね。
Discussion