问题标签 [rust-decl-macros]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
45 浏览

rust - 如何检测是否为声明性宏提供了可选关键字?

我正在写一个宏:

可以称为:

  • foo!()什么都不做

  • foo!(print)这将打印你好

如何检测是否print已提供?当我使用重复运算符时,我需要放入一个变量。我可以使用某种空变量吗?( (print $print:empty)?)

0 投票
1 回答
79 浏览

rust - 有没有办法将函数作为宏的参数传递?

我正在尝试编写一个类似于g_signal_connect_swappedgtk+ 的函数。

ident在这里不起作用,因为我想将完整路径传递给函数。例如。gtk::ApplicationWindow::关闭。所以我可以做类似的事情connect_clicked_swap!(button, &window, gtk::ApplicationWindow::close)

0 投票
2 回答
63 浏览

rust - 如何从宏中的表达式参数中获取标识符?

我有一个由变量定义的常量值:

我想做一个这样的功能:

如果我可以以一种或另一种方式对 ident 值进行一些操作以避免定义冲突,则可以加分。我可以用函数定义隐藏变量吗?可能不是...

或者

0 投票
2 回答
222 浏览

rust - 如何对 macro_rules 的参数对进行操作?

我正在使用 const 泛型和宏在编译时构建一个简单的前馈神经网络。这些是一个接一个的一堆矩阵。

我创建了network!宏,它的工作原理是这样的:

第一项是输入的数量,其余的是每层的神经元数量。宏如下所示:

它声明了一个层元素数组,它使用 const 泛型在每一层上拥有一个固定大小的权重数组,第一个类型参数是它期望的输入数量,第二个类型参数是输出数量。

该宏产生以下代码:

这是完全错误的,因为对于每一层,输入的数量应该是前一层的输出数量,就像这样(注意 2 -> 4):

为此,我需要在每次迭代时将值替换为$inputs的值$outputs,但我不知道该怎么做。

0 投票
1 回答
79 浏览

rust - 如何从以前的宏生成代码生成宏?

为了创建一个使用泛型类型的结构的 pyo3 驱动的 Python 类,我想使用包装器来生成不需要为每个特定类型执行此操作所需的代码。

我创建了一个生成代码的宏,但我需要将宏生成的函数注册为 Python 模块的函数。

一种方法是跟踪宏中使用的标识以使用它们并wrap_pyfunction使用另一个宏生成,但我找不到任何相关的东西。

(当然,任何其他生成代码的解决方案都会受到热烈欢迎)

我现在拥有的(简化的)代码:

0 投票
2 回答
243 浏览

rust - 如何在声明性宏中生成特征边界?

我有一个具有大量相关类型的特征。我想要一个在 where 子句绑定的两侧使用这些关联类型的函数:

输入所有的界限会有点脆弱,所以我想创建一个宏来生成这个:

但是,在 where 子句绑定的右侧调用宏会导致错误:

是否有任何巧妙的宏技巧可以让我干掉这段代码?

我对宏更改的确切位置或参数没有意见。例如,生成整体的宏fn是可以接受的。

如果这不可能,我可以使用构建脚本,但如果可能的话,我宁愿将代码放在同一位置。

0 投票
2 回答
73 浏览

rust - 如何在声明性宏中提前返回并推断返回类型?

我有一个宏,它只生成一个结构的实例,如下所示:

如您所见,我根据bar()函数的结果在宏中提前返回。然而,这被解决为一个错误,说:

这也是具有完整最小可重复样本的操场的永久链接。

我认为这里的问题是类型推断。我想返回示例FooResult中的一个实例,但宏无法推断它。

那么,如何在声明性宏中提前返回并推断/定义返回类型?


环境

  • 锈病 1.55.0