相关疑难解决方法(0)

有没有办法用宏来计算?

我想创建一个指定次数打印"Hello"的宏.它的使用方式如下:

many_greetings!(3);  // expands to three `println!("Hello");` statements
Run Code Online (Sandbox Code Playgroud)

创建该宏的天真方式是:

macro_rules! many_greetings {
    ($times:expr) => {{
        println!("Hello");
        many_greetings!($times - 1);
    }};
    (0) => ();
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为编译器不计算表达式; $times - 1不计算,但作为一个新的表达式输入宏.

macros rust rust-macros

14
推荐指数
3
解决办法
2112
查看次数

计算宏中重复的长度

我正在尝试实现一个宏以允许创建 MATLAB 风格的矩阵。我有一个基本的工作宏,但我还有很长的路要走。

我希望能够强制执行正确的结构(每行中的元素数量相同),但我不确定如何在宏中执行此操作。我想我想强制每个内部重复具有相同的长度 - 这是我可以做的吗?

到目前为止,这是我的代码:

pub struct Matrix<T> {
    pub cols: usize,
    pub rows: usize,
    pub data: Vec<T>
}

macro_rules! mat {
    ( $($( $x:expr ),*);* ) => {
        {
            let mut vec = Vec::new();
            let mut rows = 0;

            $(
                $(
                    vec.push($x);
                )*
                rows += 1;
            )*
            Matrix { cols : vec.len()/rows, rows: rows, data: vec}
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

它有效,但正如您所见,它不是很安全。它对结构没有限制。

我想用这个宏做更多的事情,但我认为这是一个好的开始!

更新:

这是我制定的蹩脚实现的一些操场代码。如果有人有更好的建议,请告诉我!否则我会自己关闭它。

macros rust

6
推荐指数
2
解决办法
3463
查看次数

标签 统计

macros ×2

rust ×2

rust-macros ×1