我正在尝试连接静态字符串和字符串文字以构建另一个静态字符串.以下是我能想到的最好的,但它不起作用:
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)
使用宏而不是常量感觉有点难看,但它按预期工作.
编译器错误是
错误:预期文字
文字是你直接输入的任何东西,如"hello"或5.在您开始使用常量的那一刻,您不再使用文字,而是使用标识符.所以现在你能做的最好的就是
const VERSION_STRING: &'static str =
concat!("my program v", env!("CARGO_PKG_VERSION"));
Run Code Online (Sandbox Code Playgroud)
由于env!宏扩展为文字,您可以在里面使用它concat!.
| 归档时间: |
|
| 查看次数: |
3069 次 |
| 最近记录: |