2

以下显然不起作用:

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 和表达式使其以类似的方式工作的最优雅(可能是惯用的)方式是什么?

4

1 回答 1

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())
        });
    };
}

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

于 2014-12-29T17:48:50.220 回答