gpt4 book ai didi

rust - 创建具有无限参数的宏

转载 作者:行者123 更新时间:2023-11-29 08:06:55 27 4
gpt4 key购买 nike

struct Foo{
value: i32
}
impl Foo{
fn get_and_change_value(&mut self) -> i32{
let v = self.value;
self.value = 42;
v
}
}
//glue_code_macro
fn main(){
let mut f1 = Foo{value:1};
let mut f2 = Foo{value:2};
let mut f3 = Foo{value:3};
let v: Vec<i32> = glue_code_macro!(f1,f2,f3);
}

我想创建 glue_code_macro,它采用 n 变量并创建一个向量。我不认为我可以用普通函数实现这一点,因为我有一个可变引用,我无法更改它的内容。

在我的脑海里它会扩展到

let v = {
let v1 = f1.get_and_change_value();
let v2 = f2.get_and_change_value();
let v3 = f3.get_and_change_value();
vec!(v1,v2,v3)
}

这可能吗?如果是,我该怎么做?

最佳答案

这是可能的。将此添加到模块的顶部:

#![feature(macro_rules)]
macro_rules! glue_code_macro(
($($element:ident),*) => (
vec![$($element.get_and_change_value(),)*]
)
)

宏指南解释了它是如何工作的:http://doc.rust-lang.org/guide-macros.html

关于rust - 创建具有无限参数的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25185562/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com