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

Fomalhaut

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

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] }
}

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

阿卜杜勒·尼亚斯(Abdul Niyas)总理

你可以这样

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] }
}

内的代码$(...)*将针对每个匹配项进行扩展。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Rust宏中匹配特征?

来自分类Dev

如何在宏中迭代元组/对象的字段(名称+类型)?

来自分类Dev

如何在bash脚本中迭代参数?

来自分类Dev

如何在bash脚本中迭代参数?

来自分类Dev

如何在Rust宏中匹配表达式的类型?

来自分类Dev

如何在Rust程序宏中创建多个项目?

来自分类Dev

如何在rust宏中从“ Foo :: Bar”获得“ Bar”?

来自分类Dev

如何在Rust中为宏设置依赖项?

来自分类Dev

如何在Rust中从for循环中迭代和提取值

来自分类Dev

如何在Rust中迭代几个选项向量?

来自分类Dev

如何在VC ++ 6.0中模拟可变参数宏?

来自分类Dev

如何在C宏中附加到参数名称

来自分类Dev

如何在递归宏中更改参数变量值?

来自分类Dev

如何在VC ++ 6.0中模拟可变参数宏?

来自分类Dev

如何在Rust宏中使用ty

来自分类Dev

如何在Rust中导入宏?

来自分类Dev

如何在Rust宏中使用ty

来自分类Dev

如何在R中的mapply中指定要迭代的参数

来自分类Dev

如何在Rust中使用Command参数中的引号

来自分类Dev

如何在Rust中访问方法内部的元组枚举的参数

来自分类Dev

如何从Clojure中的map宏获取宏中的参数?

来自分类Dev

如何从Clojure中的map宏获取宏中的参数?

来自分类Dev

在Rust中迭代时如何调用方法

来自分类Dev

如何在Clojure中的映射函数内的宏中获取嵌套参数?

来自分类Dev

如何在 Rust for 循环的当前迭代中获取下一次迭代的值?

来自分类Dev

如何在Rust中为引用创建一个“可迭代”特征?

来自分类Dev

如何在不同类型的函数上推广Rust宏?

来自分类Dev

如何在sweet.js中创建参数化的infix宏

来自分类Dev

如何在由宏创建的方法中创建数组的未绑定变量部分(方法参数)

Related 相关文章

热门标签

归档