问题标签 [rust-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 回答
247 浏览

rust - 带有问号的 std 文档示例无法编译

我在宏观方面遇到了极大的困难,try!以至于?我开始质疑现实的结构。我直接从 rust-docs中提取了下面的示例,它仍然在我的脸上爆炸。

代码:

错误:

rustup根据(1.19.0) ,我正在使用 Rust 的最新稳定版本

0 投票
1 回答
1084 浏览

rust - Rust 中的宏调用意外结束

我在 Rust 中有以下代码

在编译时,我收到以下错误

我不确定问题是什么。

编辑:我使用的是最新的 Rust 版本(稳定版 1.20)

0 投票
1 回答
1037 浏览

compilation - 是否有宏或类似的解决方法在编译时包含源文件夹(src)路径?

是否有 Rust 宏或类似的解决方法可以cargo new在编译时或特别是在执行时将通过在我的源文件中创建的“src”文件夹的路径作为字符串文字包含在内cargo build

我已经成功地完成了类似的操作,include_str!用于包含文件内容,但我需要知道是否可以在代码中直接包含 src 路径。

0 投票
2 回答
237 浏览

rust - 如何将以下 from_str 宏更改为 from_json?

我有以下宏。请注意,这StringContent是一个枚举项。

这使我可以编写类似的代码

现在我想要另一个宏from_json!,它可以让我摆脱类似的r#""#东西

我尝试了以下似乎不起作用

我怎么from_json去上班?

0 投票
1 回答
113 浏览

macros - 如何测试宏中的标识符是否以下划线开头?

我需要检查标识符是否以下划线开头。这不起作用:

错误在哪里?

0 投票
1 回答
261 浏览

rust - 将参数传递给函数 n 次

我正在尝试使用 Rust 中的不同模式,并想尝试动​​态调用具有相似签名但参数数量不同的几个函数之一。例如:

我希望能够将所有参数的值传递给这些方法,以便它们可以互换调用 - 所以如果输入是5我希望能够调用foo(5), bar(5, 5), orbaz(5, 5, 5)等​​等。

似乎这最好通过宏或其他语法扩展来完成,但我不确定表达它的最佳方式。到目前为止,我所拥有的只是对案例的强力枚举,但这似乎既乏味(为每个案例重新编写相同的表达式)又脆弱(它不支持 n+1 个参数):

我遇到了这种看起来很相似的模式,但它仍然需要分别列举每个案例。

有没有更好的方法可以更灵活地将 a 包装fn(X, ...)为一个恰好采用 one 的函数X

游乐场示例

0 投票
1 回答
83 浏览

macros - 如何实现 Lispian cond 宏?

预期用途:

应扩展为:

请注意,它不会产生包罗万象的else { ... }后缀。

我的尝试:

但是,编译器抱怨该else关键字。

0 投票
1 回答
435 浏览

macros - 如何在 rust 中向宏文档添加示例?

在编写宏时,我想正确地记录它,这包括示例。
但是当我尝试以与常规函数相同的方式执行此操作时,我得到:

cargo test每晚运行以测试以下内容:

我对 doctests 的理解是每个都包含在自己的main函数中。像这样:

如果这是正确的,它将解释错误。

有什么方法可以将示例实际添加到宏中?

0 投票
1 回答
294 浏览

rust - Rust 宏中相同变量的不同分隔符

我想匹配如下模式:

将为所有数字生成相同的代码,但我希望在有分号时运行其他代码。这种模式可能吗?

我试过了:

但我似乎无法在右侧完成这项工作。

0 投票
0 回答
482 浏览

rust - 我可以将变量名称附加到宏中的 setter 和 getter 函数名称吗?

我需要为我的 FFI 代码生成 setter 和 getter。

有没有办法可以将变量名称附加到宏中的 setter 和 getter 函数名称?我试过stringify!($var + set)了,但它产生了一堆错误。

将它隐藏在每个变量的模块中是唯一的方法吗?

对于myvar1setter 和 getter 将分别是myvar1_setmyvar1_get