#[derive(Debug)]
struct Race {
name: String,
laps: Vec<i32>,
}
impl Race {
// ์ด ๋ฉ์๋๋ self๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ์ ์ ๋ฉ์๋ ์
๋๋ค.
// No receiver, a static method
fn new(name: &str) -> Race {
Race { name: String::from(name), laps: Vec::new() }
}
// ์ด ๋ฉ์๋๋ self์ ๋ํ ๋
์ ์ ์ธ ์ฝ๊ธฐ-์ฐ๊ธฐ ๊ถํ์ ๊ฐ์ต๋๋ค.
// Exclusive borrowed read-write access to self
fn add_lap(&mut self, lap: i32) {
self.laps.push(lap);
}
// ์ด ๋ฉ์๋๋ self ๋ํ ๊ณต์ ๋ฐ ์ฝ๊ธฐ์ ์ฉ ๋น๋ฆผ ๊ถํ์ ๊ฐ์ต๋๋ค.
// Shared and read-only borrowed access to self
fn print_laps(&self) {
println!("Recorded {} laps for {}:", self.laps.len(), self.name);
for (idx, lap) in self.laps.iter().enumerate() {
println!("Lap {idx}: {lap} sec");
}
}
// ์ด ๋ฉ์๋๋ self์ ์์ ๊ถ์ ๊ฐ์ ธ์ต๋๋ค.
// self๋ฅผ ๋ฐํํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์๋๊ฐ ํธ์ถ ๋ ํ main์์ race ์ฌ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
// Exclusive ownership of self
fn finish(self) {
let total = self.laps.iter().sum::<i32>();
println!("Race {} is finished, total lap time: {}", self.name, total);
}
}
fn main() {
let mut race = Race::new("Monaco Grand Prix");
race.add_lap(70);
race.add_lap(68);
race.print_laps();
race.add_lap(71);
race.print_laps();
race.finish();
}