이번 편의 목표: 두 값 중 작지 않은 쪽을 고르는 함수를, 정수에 한정하지 않고 비교 가능한 타입으로 적습니다.
함수 이름 뒤의 <T>가 타입 매개변수입니다. T: PartialOrd는 그 타입이 <와 > 같은 비교를 지원해야 한다는 조건입니다. 호출하는 곳의 인자에서 T가 정해집니다.
이 편은 src/main.rs만 바꿉니다. 13편의 book.rs가 있어도 mod book을 이 파일에 적지 않으면 컴파일에 포함되지 않습니다.
fn larger<T: PartialOrd>(left: T, right: T) -> T {
if left >= right { left } else { right }
}
fn main() {
println!("{}", larger(3, 5));
}출력은 5입니다. 3과 5는 둘 다 i32이므로 T는 i32입니다. 한 호출 안에서 left와 right의 타입은 같아야 합니다. 정수와 소수를 한 호출에 섞을 수 없습니다.
PartialOrd만 조건으로 두면 비교가 부분적일 수 있는 타입도 받습니다. 이 편의 정수는 모든 쌍이 비교되므로 결과 갈래가 항상 있습니다. 함수가 값을 돌려주면서 소유권도 같이 돌아갑니다. i32는 Copy라 호출 쪽 변수도 남지만, String을 넘기면 인자의 소유권이 함수로 들어갑니다.
직접 해 보기
larger(10, 7)을 출력해 10이 나오는지 확인하세요.
해설
10이 7보다 작지 않으므로 left가 반환됩니다. 비교 방향은 함수 안의 >=입니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.