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

时间:2014-12-29 17:40:16

标签: rust idioms fizzbuzz

以下显然不起作用:

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 个答案:

答案 0 :(得分:5)

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

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