如何在Rust中连接静态字符串

时间:2016-02-02 15:26:36

标签: rust

我正在尝试连接静态字符串和字符串文字来构建另一个静态字符串。以下是我能想到的最好的,但它不起作用:

const DESCRIPTION: &'static str = "my program";
const VERSION: &'static str = env!("CARGO_PKG_VERSION");
const VERSION_STRING: &'static str = concat!(DESCRIPTION, " v", VERSION);

有没有办法在Rust中做到这一点,还是我必须一遍又一遍地写相同的文字?

2 个答案:

答案 0 :(得分:10)

由于我本质上是在尝试模拟C宏,因此尝试用Rust宏解决问题并成功:

macro_rules! description {
    () => ( "my program" )
}
macro_rules! version {
    () => ( env!("CARGO_PKG_VERSION") )
}
macro_rules! version_string {
    () => ( concat!(description!(), " v", version!()) )
}

使用宏而不是常量感觉有点难看,但它按预期工作。

答案 1 :(得分:8)

编译器错误是

  

错误:预期文字

文字是您直接输入的任何内容,例如"hello"5。在您开始使用常量的那一刻,您不再使用文字,而是使用标识符。所以现在你能做的最好的就是

const VERSION_STRING: &'static str =
    concat!("my program v", env!("CARGO_PKG_VERSION"));

由于env!宏扩展为文字,因此您可以在concat!内使用它。