gpt4 book ai didi

macros - `:expr` 后跟 `:tt` ,`expr` 片段不允许

转载 作者:行者123 更新时间:2023-11-29 07:58:40 27 4
gpt4 key购买 nike

我正在尝试编写支持简单语法的宏,例如:

boo: 3 and foo: go or bar: 4+2

这是我试过的:

macro_rules! solr {
($TOPIC:ident : $VALUE:expr $($rest:tt)*) => {
println!("{} {}", stringify!($TOPIC), stringify!($VALUE));
}
}

fn main() {
solr!(
boo: "hola!"
);
}

Playground

我收到此错误:

error: `$VALUE:expr` is followed by `$rest:tt`, which is not allowed for `expr` fragments
--> src/main.rs:2:35
|
2 | ($TOPIC:ident : $VALUE:expr $($rest:tt)*) => {
| ^^^^^^^^

这是有道理的,但我需要能够接受一个表达式并将句子的其余部分再次传递给宏以完成给定的句子。

我如何支持该语法或更改宏?

最佳答案

How can I support that grammar or alter the macro?

你不能。没有解决方法。没有诀窍。宏系统是专门为防止您这样做而编写的。问题是在表达式(或类型等)之后允许任意标记有效地阻止了 Rust 开发人员永远扩展语言语法同时保持向后兼容性。因此,它是被禁止的。

您可以更改输入语法,使其在表达式(例如 ;) 之后具有可接受的终止标记,或者更改到过程宏(并将宏调用重新定义为项目的 #[derive] 属性)。

关于macros - `:expr` 后跟 `:tt` ,`expr` 片段不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46667531/

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