构建分层 const &str 值的惯用方法是什么?

问题描述 投票:0回答:1

我想定义一个使用另一个

const &str
值的
const &str
。在 Rust 中执行此操作的标准方法是什么?

const FOO: &str = "foo";
const FOOBAR: &str = FOO + "bar"; // "foobar"

fn main() {
    println!("{}{}", "fee", FOOBAR); // "feefoobar"
}
string rust constants
1个回答
1
投票

有了依赖项,

const_format
只需几行代码即可:

const FOOBAR: &str = const_format::concatcp!(FOO, "bar"); // "foobar"

如果没有依赖性,这会有点长:

macro_rules! concat_const_str {
    ($a:expr, $b:expr $(,)?) => {{
        const __CONCAT_A: &str = $a;
        const __CONCAT_B: &str = $b;
        const __CONCAT_LEN: usize = __CONCAT_A.len() + __CONCAT_B.len();
        const __CONCAT_STORAGE: [u8; __CONCAT_LEN] = {
            let mut storage = [0; __CONCAT_LEN];
            let a = __CONCAT_A.as_bytes();
            let mut i = 0;
            while i < a.len() {
                storage[i] = a[i];
                i += 1;
            }
            let b = __CONCAT_B.as_bytes();
            let mut j = 0;
            while j < b.len() {
                storage[i] = b[j];
                j += 1;
                i += 1;
            }
            storage
        };
        match ::std::str::from_utf8(&__CONCAT_STORAGE) {
            Ok(s) => s,
            Err(_) => unreachable!(),
        }
    }};
}

const FOO: &str = "foo";
const FOOBAR: &str = concat_const_str!(FOO, "bar"); // "foobar"
© www.soinside.com 2019 - 2024. All rights reserved.