Ich versuche, ein Makro zu erstellen, die ein struct
erzeugt, die eine Reihe von Methoden bereitstellt, die in das Makro übergeben werden. Zum Beispiel, Aufruf:Ist es möglich, einen Elementarg zu verwenden, der als Methode an ein Makro übergeben wird?
create_impl!(StructName, fn foo() -> u32 { return 432 })
sollte eine leere Struktur StructName
erzeugen, die die Methode foo()
zur Verfügung stellt.
Mein erster Versuch dazu verwendet die item
Makro arg Typ. Allerdings, wenn ich versuche und ein item
in der Regel verwenden, erhalte ich den folgende Compiler-Fehler:
error: expected one of `const`, `default`, `extern`, `fn`, `pub`, `type`, `unsafe`, or `}`, found `fn foo() -> u32 { return 42; }`
--> src/lib.rs:40:13
|
40 | $($function)*
| ^^^^^^^^^
Ist es möglich, item
Argumente zu verwenden Methoden erzeugten Strukturen auf diese Weise zu definieren? Gibt es etwas, das mir fehlt?
Hier ist das vollständige Makro I definiert haben:
macro_rules! create_impl {
($struct_name:ident, $($function:item),*) => {
struct $struct_name {
}
impl $struct_name {
// This is the part that fails.
$($function)*
}
};
}
Ich denke, dass * Methoden * überhaupt keine Elemente sind.Wenn ich 'fn foo()' in 'fn foo (self)' ändere, bekomme ich * error: erwartet eines von '::' oder ':', found ')' * (der gleiche Fehler tritt auf, wenn du das draussen schreibst ein Makro). –