fn a() {}
scheint eine Parsing-Regel zu erfüllen, die eine fn
erwartet, dann einige andere Sachen. item
s sollte Funktionsdefinitionen sein können, oder? Also sollten sie arbeiten, oder?Makrofehler beim Versuch, ein Merkmal innerhalb einer Makroerweiterung zu implementieren
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();
}
Der Fehler in Frage:
error: expected one of `const`, `default`, `extern`, `fn`, `pub`, `type`, `unsafe`, or `}`, found `fn a() { }`
--> <anon>:11:20
|
11 | $($i)*
| ^^
es machen $(fn $i)*
ändert nur die Fehler zu erwarten eine Kennung nach dem fn
zu beschweren, was Sinn macht, aber die anfängliche Fehler tut nicht (zumindest für mich).
Gibt es einen Unterschied zum Parser bezüglich Code, der in der Quell-vs-Code ist, die von einem Makro in der Quelle platziert wird?