Могут ли макросы соответствовать константным аргументам вместо литералов?
Учитываяпример соответствия макросов, это показывает, как макросы могут соответствовать аргументу.
Я сделал очень незначительные изменения, чтобы использовать числа:
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
оператор не пригоден для меня, поскольку в моем коде каждая ветвь разрешается в разные типы, что приводит к ошибке. Поэтому мне особенно интересно узнать, может ли константа быть передана в макрос.