【问题标题】:What is the most idiomatic way to concatenate integer variables?连接整数变量最惯用的方法是什么?
【发布时间】:2015-01-15 14:19:01
【问题描述】:

编译器似乎没有推断出整数变量作为字符串文字传递到concat! 宏中,所以我找到了将这些整数变量转换为字符串文字的stringify! 宏,但这看起来很难看:

fn date(year: u8, month: u8, day: u8) -> String
{
    concat!(stringify!(month), "/",
            stringify!(day), "/",
            stringify!(year)).to_string()
}

【问题讨论】:

    标签: string concatenation rust


    【解决方案1】:

    concat! 接受文字并在编译时生成&'static str。您应该为此使用format!

    fn date(year: u8, month: u8, day: u8) -> String {
        format!("{}/{}/{}", month, day, year)
    }
    

    【讨论】:

    • 哦,好的,谢谢!当它允许我时,我会接受这个作为答案。这使得连接!在我看来毫无价值,他们应该把它拿出来以在语言中保留一组更小的、正交的特性。
    • @elleciel:实际上,在一个注重性能的语言中,concat! 是必不可少的:&'static str 不需要内存分配,可以存储在只读内存中。
    • @elleciel: concat! 不是一个常用的功能,但偶尔在宏中是有价值的。
    【解决方案2】:

    另请注意,您的示例没有做您想做的事情!当你编译它时,你会得到这些警告:

    <anon>:1:9: 1:13 warning: unused variable: `year`, #[warn(unused_variables)] on by default
    <anon>:1 fn date(year: u8, month: u8, day: u8) -> String
                     ^~~~
    <anon>:1:19: 1:24 warning: unused variable: `month`, #[warn(unused_variables)] on by default
    <anon>:1 fn date(year: u8, month: u8, day: u8) -> String
                               ^~~~~
    <anon>:1:30: 1:33 warning: unused variable: `day`, #[warn(unused_variables)] on by default
    <anon>:1 fn date(year: u8, month: u8, day: u8) -> String
                                          ^~~
    

    请注意,所有变量都未使用!调用函数的输出将总是是字符串:

    month/day/year
    

    【讨论】:

    • 很好,我没有意识到这是 stringify! 宏的用途,我看到了它的有趣用途。
    猜你喜欢
    • 2021-03-16
    • 2010-09-27
    • 1970-01-01
    • 2018-08-20
    • 2015-09-20
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多