generic scope

제네릭 선언 위치 지도

제네릭 이름은 어디에 선언됐는지에 따라 묶이는 범위가 달라진다. 구조체의 타입과 메서드 호출의 타입을 따로 읽어야 한다.

self

X1과 Y1

impl<X1, Y1>에 선언되어 구조체 인스턴스와 같은 수명을 갖는 타입 이름이다.

other

X2와 Y2

fn mixup<X2, Y2>에 선언되어 이 메서드 호출에서만 새로 정해지는 타입 이름이다.

result

X1과 Y2

결과는 첫 점의 x 타입과 두 번째 점의 y 타입을 선택해 새로운 Point를 만든다.

선언 위치
의미
읽는 기준
구조체 정의
필드 타입을 담는 자리표시자다.
인스턴스를 만들 때 구체 타입으로 고정된다.
impl 블록
그 구조체 묶음에 메서드를 붙인다.
Self가 어떤 타입 묶음을 가진 값인지 추적한다.
메서드 정의
호출마다 새로 들어오는 타입을 받는다.
반환 타입이 기존 타입과 새 타입 중 무엇을 골랐는지 본다.
p1

x는 정수, y는 실수다. 이 둘이 X1, Y1을 채운다.

p2

x는 문자열 조각, y는 문자다. 이 둘이 X2, Y2를 채운다.

mixup

메서드는 self.xother.y만 선택한다.

p3

결과의 x는 정수, y는 문자다. 선언 위치를 알면 타입 흐름이 흔들리지 않는다.