実装 - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# 実装

関数と同様、`impl`でメソッドを実装する際にもジェネリック型特有の記法が必要です。

    #![allow(unused)]
    fn main() {
    struct S; // 具象型`S`
    struct GenericVal<T>(T); // ジェネリック型`GenericVal`

    // 型パラメータを指定したうえで、GenericValにメソッドを実装。
    impl GenericVal<f32> {} // `f32`の場合のメソッド
    impl GenericVal<S> {} // 上で定義した`S`への実装

    // ジェネリック型のまま扱うには`<T>`が先に来る必要があります。
    impl<T> GenericVal<T> {}
    }

    struct Val {
        val: f64,
    }

    struct GenVal<T> {
        gen_val: T,
    }

    // Valに対して実装。
    impl Val {
        fn value(&self) -> &f64 {
            &self.val
        }
    }

    // ジェネリック型`T`の場合のメソッドをGenValに対して実装。
    impl<T> GenVal<T> {
        fn value(&self) -> &T {
            &self.gen_val
        }
    }

    fn main() {
        let x = Val { val: 3.0 };
        let y = GenVal { gen_val: 3i32 };

        println!("{}, {}", x.value(), y.value());
    }

### 参照

参照を返す関数, `impl`, 構造体