在常量函数中插值字符串。

4

我正在尝试制作一个类似于此的函数

pub const fn insert(num1:i32, num2:i32) -> &'static str { 
    formatcp!("n1:{}, n2:{}" , num1, num2) 
} 

但是num1/num2并非常量。 我认为这可以通过宏实现,但我对宏不太熟悉。


这个回答解决了您的问题吗?如何格式化一个const字符串 - Chayim Friedman
Chayim Friedman并不完全正确,因为答案是来自2015年的夜间版本,其中const fn还没有完成。现在,您可以通过const fn创建常量。我的问题集中在编译时上下文中带有参数的字符串插值。 - RedCrafter LP
啊,好的。我的错误。对不起。 - Chayim Friedman
你可以使用 nightly 吗? - Chayim Friedman
结果将在哪里使用?如果您可以调整签名,也许您可以只使用const_format?这并没有太大的区别,并且使用了相同的思路。 - Chayim Friedman
显示剩余6条评论
1个回答

0

这有帮助吗?

macro_rules! insert {
    ($n1:expr, $n2:expr) => {
        concat!("n1: ", $n1, " , n2: ", $n2)
    };
}

const TEST_1: &str = insert!(1, 2);
const TEST_2: &str = insert!(2, 3);

fn main() {
    println!("{}", TEST_1);
    println!("{}", TEST_2);
}

这是一个很好的解决方案。不知道在const上下文中可以使用concat!。唯一缺少的是,宏参数不是i32。但是只需要在宏中添加2个i32常量并将参数分配给它即可轻松修复此问题。 - RedCrafter LP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接