gpt4 book ai didi

rust - 如何在 Rust 中迭代宏的参数?

转载 作者:行者123 更新时间:2023-12-03 11:24:48 25 4
gpt4 key购买 nike

我正在尝试创建一个宏,用固定大小填充向量的第一个元素。其余元素应为零。我写:

const SIZE: usize = 3;

#[derive(Debug)]
struct MyVec {
data: [f32; SIZE]
}

macro_rules! my_vec {
($($x:expr),*) => [{
let mut data: [f32; SIZE] = [0.0; SIZE];
for (i, e) in x.enumerate() {
data[i] = e;
}
MyVec { data }
}]
}

fn main() {
let v = my_vec![1.0, 2.0];
println!("{:?}", v); // must be MyVec { data: [1.0, 2.0, 0.0] }
}

看起来我试图以错误的方式迭代参数。我该如何解决?

最佳答案

你可以这样做,

const SIZE: usize = 3;

#[derive(Debug)]
struct MyVec {
data: [f32; SIZE],
}

macro_rules! my_vec {
( $( $x:expr ),* ) => {
{
let mut data: [f32; SIZE] = [0.0; SIZE];
let mut index = 0;
$(
#[allow(unused_assignments)]
{
data[index] = $x;
index = index + 1;
}
)*
MyVec { data }
}
};
}

fn main() {
let v = my_vec![1.0, 2.0];
println!("{:?}", v); // print MyVec { data: [1.0, 2.0, 0.0] }
}
$(...)*里面的代码将针对每场比赛进行扩展。

关于rust - 如何在 Rust 中迭代宏的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59468633/

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