fn a() {}
似乎满足了预期 a 的解析规则fn
,然后是其他一些东西。item
s 应该可以是函数定义,对吧?所以他们应该工作,对吧?
macro_rules! multi_impl {
(for $base:ty :
$($t:ty {
$($i:item);*
}),+) =>
{
$(
impl $t for $base
{
$( $i )*
}
)+
}
}
trait A {
fn a();
}
trait B {
fn b();
}
struct S;
multi_impl! {
for S:
A {
fn a() {}
}, B {
fn b() {}
}
}
fn main() {
S::a();
S::b();
}
有问题的错误:
error: expected one of `const`, `default`, `extern`, `fn`, `pub`, `type`, `unsafe`, or `}`, found `fn a() { }`
--> <anon>:11:20
|
11 | $( $i )*
| ^^
使它$( fn $i)*
只会更改错误以抱怨在 之后需要一个标识符fn
,这是有道理的,但最初的错误没有(至少对我而言)。
解析器对源代码中的代码与宏放入源代码中的代码有区别吗?