使用宏迭代器语法创建一个向量



如何使用迭代器Rust宏语法创建新矢量?

我正在尝试这个:

unsafe { 
MUT_STATIC_VAR = vec![
#(#my_outher_vector_data)*,
];
}

完整的解释:当宏在编译时被跨度时,我试图重新设计我在一个类型为Vec的mut静态变量中写入的数据。当我尝试在运行时检索数据时,全局数据是空的,所以我在main()中重新连接我想要的数据。

回顾。我只是想把一个向量的内容分配给另一个向量,但arrayVec<T>都没有实现ToTokens

编译器错误:

`main` function not found in crate `my_crate`

感谢

要初始化内容,Iterators可以使用宏#(#...)*,语法。

let other_as_iter = my_outher_vector_data.iter();

quote {
unsafe { 
MUT_STATIC_VAR = vec![
#(#other_as_iter)*,
];
}
}

我认为lazy_static应该做这项工作:

#[macro_use]
extern crate lazy_static;
use std::sync::Mutex;
lazy_static! {
static ref MUT_STATIC_VAR: Mutex<Vec<String>> = Mutex::new(vec![]);
}
fn other_vec(v: Vec<String>) {
let mut r = MUT_STATIC_VAR.lock().unwrap();
r.extend_from_slice(v.as_slice());
}
fn main() {
other_vec(vec!["dog".to_string(), "cat".to_string(), "mouse".to_string()]);
}

…或在初始化MUT_STATIC_VAR:后排出另一个矢量

fn other_vec(v: &mut Vec<String>) {
let mut r = MUT_STATIC_VAR.lock().unwrap();
r.extend_from_slice(v.drain(..).as_slice());
}
fn main() {
other_vec(&mut vec!["dog".to_string(), "cat".to_string(), "mouse".to_string()]);
}

…或封装在other_vec!宏中的my_other_vector_data
Playground

macro_rules! other_vec {
() => {
vec!["dog", "cat", "mouse"] // my_other_vector_data here
};
}

最新更新