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

Cod*_*key 14 rust

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

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

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

Cod*_*key 11

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

macro_rules! description {
    () => ( "my program" )
}
macro_rules! version {
    () => ( env!("CARGO_PKG_VERSION") )
}
macro_rules! version_string {
    () => ( concat!(description!(), " v", version!()) )
}
Run Code Online (Sandbox Code Playgroud)

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


oli*_*obk 8

编译器错误是

错误:预期文字

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

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

由于env!宏扩展为文字,您可以在里面使用它concat!.

  • 所以,正如我所担心的,我将不得不一遍又一遍地写同样的文字。 (2认同)