Point<X1, Y1>x는 여기서 선택제네릭 선언 위치 지도
제네릭 이름은 어디에 선언됐는지에 따라 묶이는 범위가 달라진다. 구조체의 타입과 메서드 호출의 타입을 따로 읽어야 한다.
Point<X2, Y2>y는 여기서 선택self.x + other.yPoint<X1, Y2>선언 위치가 타입 출처를 결정X1과 Y1
impl<X1, Y1>에 선언되어 구조체 인스턴스와 같은
수명을 갖는 타입 이름이다.
X2와 Y2
fn mixup<X2, Y2>에 선언되어 이 메서드 호출에서만
새로 정해지는 타입 이름이다.
X1과 Y2
결과는 첫 점의 x 타입과 두 번째 점의 y 타입을 선택해 새로운
Point를 만든다.
선언 위치
의미
읽는 기준
구조체 정의
필드 타입을 담는 자리표시자다.
인스턴스를 만들 때 구체 타입으로 고정된다.
impl 블록
그 구조체 묶음에 메서드를 붙인다.
Self가 어떤 타입 묶음을 가진 값인지 추적한다.
메서드 정의
호출마다 새로 들어오는 타입을 받는다.
반환 타입이 기존 타입과 새 타입 중 무엇을 골랐는지 본다.
x는 정수, y는 실수다. 이 둘이
X1, Y1을 채운다.
x는 문자열 조각, y는 문자다. 이 둘이
X2, Y2를 채운다.
메서드는 self.x와 other.y만 선택한다.
결과의 x는 정수, y는 문자다. 선언 위치를 알면 타입 흐름이 흔들리지 않는다.