テストケース: 単位を扱う
共通の単位同士を扱う際のチェックのために、Add
を幽霊型を用いた実装にすると便利な場合があります。その場合Add
トレイトは以下のようになります。
訳注: RHSはRight Hand Side、つまりAdd(
+
)演算時の右辺のことです
// This construction would impose: `Self + RHS = Output`
// where RHS defaults to Self if not specified in the implementation.
// このように定義しておくと、`Self + RHS = Output`であることが保証され、
// かつ、impl時にRHSの型が明示されていない場合、デフォルトでSelfと同じに
// なる。
pub trait Add<RHS = Self> {
type Output;
fn add(self, rhs: RHS) -> Self::Output;
}
// `Output` must be `T<U>` so that `T<U> + T<U> = T<U>`.
// `Output`は`T<U>`でなくてはならないので`T<U> + T<U> = T<U>`となる。
impl<U> Add for T<U> {
type Output = T<U>;
...
}
以下は全体を示した例です。:
参照
借用(&
), トレイトバウンド, 列挙型, impl & self,
演算子のオーバーロード, 参照, トレイト (X for Y
), タプル.