Использование различных типов строк с конструкциями if else в Rust
Очевидно, что не работает следующее:
fn main() {
for i in range(1i, 101) {
println!("{}", if i % 15 == 0 {
"Fizzbuzz"
} else if i % 5 == 0 {
"Buzz"
} else if i % 3 == 0 {
"Fizz"
} else {
i
});
};
}
Его можно заставить работать так:
fn main() {
for i in range(1i, 101) {
println!("{}", if i % 15 == 0 {
"Fizzbuzz".to_string()
} else if i % 5 == 0 {
"Buzz".to_string()
} else if i % 3 == 0 {
"Fizz".to_string()
} else {
i.to_string()
});
}
}
Но каков самый элегантный (вероятно, идиоматический) способ заставить его работать подобным образом, используя if / else с выражениями?1 ответ:
Всестороннее исследование FizzBuzzиспользует теперь устаревшую структуру под названием
MaybeOwned
. Вот обновленная версия, с восхитительно названнымCowString
:Тем не менее, вы должны прочитать этот полный пост в блоге для максимального образования!use std::borrow::Cow; fn main() { for i in 1..10 { println!("{}", if i % 15 == 0 { Cow::Borrowed("Fizzbuzz") } else if i % 5 == 0 { Cow::Borrowed("Buzz") } else if i % 3 == 0 { Cow::Borrowed("Fizz") } else { Cow::Owned(i.to_string()) }); }; }