함수에 묶임
fn largest<T>(...)
호출마다 `T`가 정해지고, 입력과 반환 타입의 관계를 하나로 유지합니다.
`T`, `U`, `X1`, `Y2` 같은 이름은 타입의 종류가 아니라, 어느 선언이 어떤 타입 관계를 붙잡는지 보여주는 자리표시자입니다.
fn largest<T>(...)
호출마다 `T`가 정해지고, 입력과 반환 타입의 관계를 하나로 유지합니다.
struct Point<T, U>
인스턴스가 만들어질 때 필드별 구체 타입이 고정됩니다.
impl<T> Point<T>
모든 `Point
fn mixup<X2, Y2>
`self`의 타입과 인수 타입을 조합해 새 반환 타입을 만들 수 있습니다.
self: Point<X1, Y1>
other: Point<X2, Y2>
구조체의 제네릭과 메서드의 제네릭이 서로 다른 소스에서 옵니다.
Point<X1, Y2>
`x`는 기존 점에서, `y`는 다른 점에서 가져오므로 반환 타입도 그 관계를 그대로 표현합니다.
읽는 요령: 꺾쇠괄호가 붙은 위치를 먼저 찾고, 그 이름이 함수 전체인지, 타입 전체인지, 특정 메서드 안에서만 유효한지 분리해서 보면 됩니다.