X1과 Y1
impl<X1, Y1>에 선언되어 구조체 인스턴스와 같은
수명을 갖는 타입 이름이다.
제네릭 이름은 어디에 선언됐는지에 따라 묶이는 범위가 달라진다. 구조체의 타입과 메서드 호출의 타입을 따로 읽어야 한다.
impl<X1, Y1>에 선언되어 구조체 인스턴스와 같은
수명을 갖는 타입 이름이다.
fn mixup<X2, Y2>에 선언되어 이 메서드 호출에서만
새로 정해지는 타입 이름이다.
결과는 첫 점의 x 타입과 두 번째 점의 y 타입을 선택해 새로운
Point를 만든다.
Self가 어떤 타입 묶음을 가진 값인지 추적한다.
x는 정수, y는 실수다. 이 둘이
X1, Y1을 채운다.
x는 문자열 조각, y는 문자다. 이 둘이
X2, Y2를 채운다.
메서드는 self.x와 other.y만 선택한다.
결과의 x는 정수, y는 문자다. 선언 위치를 알면 타입 흐름이 흔들리지 않는다.