Могут ли макросы соответствовать константным аргументам вместо литералов?

Учитываяпример соответствия макросов, это показывает, как макросы могут соответствовать аргументу.

Я сделал очень незначительные изменения, чтобы использовать числа:

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

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

Работы, печать:mode Y: 3

Однако я хотел бы использовать константу в качестве аргумента, может ли это быть сделано для работы:

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);
}

Возможно ли это в Rust?

Обратите внимание, используя обычныйmatch оператор не пригоден для меня, поскольку в моем коде каждая ветвь разрешается в разные типы, что приводит к ошибке. Поэтому мне особенно интересно узнать, может ли константа быть передана в макрос.

Ответы на вопрос(2)

Ваш ответ на вопрос