Ich verwende eine Bibliothek für String-Interning (string-cache), die Makros zum effizienten Erstellen von Elementen verwendet (atom!
). Jedoch zur Vereinfachung hier ist ein ähnliches Makro, das das ProblemBestellung Makroargumentausführung
macro_rules! string_intern {
("d") => ("Found D");
}
sagen muss ich nennen das Makro von einem anderen Makro und geben ihm eine String-Version einer Kennung demonstriert.
macro_rules! print_ident {
($id:ident) => (
string_intern!(stringify!($id));
);
}
jedoch Aufruf dieses Makro
fn main() {
print_ident!(d);
}
schlägt mit Fehler:
error: no rules expected the token `stringify`
--> <anon>:7:24
|
7 | string_intern!(stringify!($id));
| ^^^^^^^^^
Ich weiß stringify!
richtig d
bespannen "d"
, Identifier konvertiert, weil gi ving es zu println!
funktioniert wie erwartet. Gibt es eine Möglichkeit, die Kennung, die ich in String umgewandelt werden soll, an string_intern
zu übergeben?
Es ist nur eine Kurzschrift. Im Grunde kann ich Sie nicht bitten, 'string-cache' herunterzuladen, um dieses Beispiel zu lösen, also ist dies MVP für dieses Problem. –
@DanielFath Ah! Ich denke, ich habe deine Absicht nicht richtig verstanden ... Du wolltest unbedingt Kompilierzeit-Abgleich ... – John