我有以下锈蚀代码
use std::any::Any;
use std::rc::Rc;
fn main() {
let mut variables = Vec::<Rc<dyn Any>>::new();
variables.push(Rc::new(1_i32));
variables.push(Rc::new(false));
variables.push(Rc::new(4.53_f64));
let integer: i32 = *variables[0].clone().downcast::<i32>().unwrap();
let boolean: bool = *variables[1].clone().downcast::<bool>().unwrap();
let floating: f64 = *variables[2].clone().downcast::<f64>().unwrap();
let my_goal: (i32, bool, f64) = (integer, boolean, floating)
println!("{:?}", my_goal);
我想使用宏来实现自动化。(我知道这不是最理想的,但这只是一个 MWE 来询问有关宏的问题)
特别是我想创建一个向下转换Any
为给定类型的元组
我的第一次尝试是:
macro_rules! my_macro {
($vector:ident; $($type:ty),*) => {
// ($($type),*)
//println!("{:?}", $vector);
//$(println!("{:?}", stringify!($type));)*
let idx = 0;
($(
*$vector[0].clone().downcast::<$type>().unwrap()
),*)
};
}
这是错误的,因为0
硬编码。我尝试了几种方法来声明一个变量并沿着宏增加它,但都失败了。我该怎么办?