>>570
続き

// Organizerの下請けでhello()結果に基づき数値を文字列化を分離
struct NumberToString<'a> { number: usize, hellos: &'a [Option<&'static str>], }
impl std::fmt::Display for NumberToString<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let mut is_done = false;
for hello in self.hellos.iter() {
if let Some(name) = hello {
write!(f, "{}", name)?;
is_done = true;
}
}
if !is_done {
write!(f, "{}", self.number)?;
}
Ok(())
}
}

// お好みの設定でOrganizerを作って数値の文字列化を依頼する
fn main() {
let organizer = Organizer::new(&[(3, "Fizz"), (5, "Buzz"), (7, "Pop"), (11, "Jazz"), (13, "Rock")]);
for number in 1.. {
println!("{}", organizer.number_to_string(number));
}
}