기존 코드
pub fn summary(ticket: Ticket) -> (Ticket, Summary) {
(ticket, ticket.summary())
}
pub struct Ticket {
pub title: String,
pub description: String,
pub status: String,
}
impl Ticket {
pub fn summary(self) -> Summary {
Summary {
title: self.title,
status: self.status,
}
}
}
풀이
pub fn summary(ticket: Ticket) -> (Ticket, Summary) {
(ticket.clone(), ticket.summary())
}
#[derive(Clone)]
pub struct Ticket {
pub title: String,
pub description: String,
pub status: String,
}
함수 summary()는 Ticket 타입 ticket을 받아서 (Ticket, Summary)를 반환한다.
함수 내부에서 튜플을 반환하는데, 매개변수로 받은 ticket을 첫번째 요소로 사용했으므로 두번째 요소로 ticket.summary()를 사용할 수 없다. 이미 값이 이동되었기 때문이다.
Ticket 타입에 #[derive(Clone)]을 명시해 Clone을 구현하고, 자신을 복제한 clone()을 반환하도록 하여 해결한다.