【发布时间】:2016-09-06 12:42:25
【问题描述】:
鉴于macro matching example,这显示了宏如何匹配参数。
我在这里做了非常小的改动来使用数字:
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 语句对我来说不可用,因为在我的代码中,每个分支都解析为不同的类型,从而产生错误。
所以我特别想知道是否可以将常量传递给宏。
【问题讨论】:
-
您说“每个分支都解析为不同的类型”。能举个例子吗?