Können Makros mit konstanten Argumenten anstelle von Literalen verglichen werden?

Angenommenmacro passendes Beispiel, dies zeigt, wie Makros mit einem Argument übereinstimmen können.

Ich habe hier nur geringfügige Änderungen vorgenommen, um Zahlen zu verwenden:

macro_rules! foo {
    (0 => $e:expr) => (println!("mode X: {}", $e));
    (1 => $e:expr) => (println!("mode Y: {}", $e));
}

fn main() {
    foo!(1 => 3);
}

Works, Drucken:mode Y: 3

Wie auch immer ich eine Konstante als Argument verwenden möchte, kann dies zum Funktionieren gebracht werden:

const CONST: usize = 1;

macro_rules! foo {
    (0 => $e:expr) => (println!("mode X: {}", $e));
    (1 => $e:expr) => (println!("mode Y: {}", $e));
}

fn main() {
    foo!(CONST => 3);
}

Ist das in Rust möglich?

Hinweis, mit einem regulärenmatchie @ -Anweisung ist für mich nicht verwendbar, da in meinem Code jeder Zweig in verschiedene Typen aufgelöst wird, was zu einem Fehler führt. Daher bin ich speziell daran interessiert zu wissen, ob eine Konstante an ein Makro übergeben werden kann.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage