gpt4 book ai didi

rust - Rust宏: What is the difference between braced and parenthesized macro bodies?

转载 作者:行者123 更新时间:2023-12-03 11:41:56 24 4
gpt4 key购买 nike

Afaik,Rust中的宏通过以下语法声明:

macro_rules! <name> {
(<pattern>) => {
<implementation>
};
}

但是我发现了一个版本,其中主体用括号括起来,而不是 Rust by Example中的花括号:
macro_rules! <name> {
(<pattern>) => (
<implementation>
)
}

还请注意缺少的尾随分号。我最好的猜测是,这与该宏使用的尾部递归有关,但是括号内的宏主体与括号内的宏主体之间的正式区别是什么?

最佳答案

macro_rules中的分支只需用;分隔即可。尾随分号是可选的。在macro_rulesformal grammar中,此描述为

MacroRules :
MacroRule ( ; MacroRule )* ;?

此处的语法类似于正则表达式。规则列表至少是一个规则,其后是任意数量的分号-jitt_code对。所有这一切之后是可选的分号。

实际上,这里的 MacroRule(){}的选择完全无关紧要。这三种都是解析 [] 的公认方法

DelimTokenTree :
( TokenTree* )
| [ TokenTree* ]
| { TokenTree* }

这意味着无论 DelimTokenTreeDelimTokenTree()还是 []包围,它的解析方式都是相同的。

特别是,您链接的宏与带有括号和尾部分号的 all six combinations相同。

关于rust - Rust宏: What is the difference between braced and parenthesized macro bodies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61969531/

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