類型直接傳遞給宏模式相匹配你所期望的方式,但如果他們通過另一個宏傳遞了作爲ty
,他們不再匹配:鏽宏不匹配,通過類型
macro_rules! mrtype {
(bool) => ("b");
(i32) => ("i");
(f64) => ("f");
(&str) => ("z");
($_t:ty) => ("o");
}
macro_rules! around {
($t:ty) => (mrtype!($t));
}
fn main() {
println!("{}{}{}", mrtype!(i32), around!(i32), around!(&str));
}
這將打印ioo
代替的iiz
。
傳遞tt
s,而不是ty
作品,但如果你有&str
需要2個tt
S,使一切不必要的複雜。