이번 편의 목표: 두 문자열 중 글자가 더 많은 쪽의 참조를 돌려주면서, 그 참조가 입력만큼만 산다고 표시합니다.
참조를 돌려주는 함수는 그 참조가 어떤 인자에서 왔는지 밝혀야 합니다. 'a가 그 표시입니다. left와 right, 반환값이 같은 'a를 쓰면, 돌려준 참조는 두 입력 중 더 짧게 사는 쪽까지만 유효합니다. 주인이 사라진 문자열을 가리키는 일을 컴파일러가 거절합니다.
fn longer<'a>(left: &'a str, right: &'a str) -> &'a str {
if left.chars().count() >= right.chars().count() {
left
} else {
right
}
}
fn main() {
let left = String::from("생각");
let right = String::from("생각나무");
let result = longer(&left, &right);
println!("{result}");
}생각은 2글자, 생각나무는 4글자입니다. 출력은 생각나무입니다. result는 새 문자열이 아니라 right의 일부를 빌린 것입니다. left와 right가 main 안에 있는 동안만 result를 출력할 수 있습니다.
글자 수가 같으면 left를 돌려줍니다. >= 조건이 그 경우입니다. 바이트 수인 len이 아니라 chars().count()로 비교해야 한글 글자 수 기준이 됩니다.
직접 해 보기
두 문자열을 책과 도서관으로 바꿨을 때 출력이 도서관인지 확인하세요.
해설
책은 1글자이고 도서관은 3글자입니다. 더 긴 right가 반환됩니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.