100 Exercises To Learn Rust - 4.11 Clone 풀기

기존 코드

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()을 반환하도록 하여 해결한다.