我正在尝试连接静态字符串和字符串文字来构建另一个静态字符串。以下是我能想到的最好的,但它不起作用:
const DESCRIPTION: &'static str = "my program";
const VERSION: &'static str = env!("CARGO_PKG_VERSION");
const VERSION_STRING: &'static str = concat!(DESCRIPTION, " v", VERSION);
有没有办法在Rust中做到这一点,还是我必须一遍又一遍地写相同的文字?
答案 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!
内使用它。