在Rust中使用if else构造的不同字符串类型

Ode*_*Wat 2 idioms fizzbuzz 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
        });
    };
}
Run Code Online (Sandbox Code Playgroud)

它可以像这样工作:

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()
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

但是使用if/else和表达式以类似的方式使它工作的最优雅(可能是惯用的)方法是什么?

She*_*ter 5

对FizzBu​​zz全面探索使用了一个现已弃用的结构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())
        });
    };
}
Run Code Online (Sandbox Code Playgroud)

但是,您应该阅读完整的博客文章以获得最大教育!

  • 我一直在想我何时应该更新文章而不是0.12.我应该至少添加一个注释. (2认同)