我可以编写一个宏来接受这样的类型:
当我将
trait Boundable<A> {
fn max_value() -> A;
}
impl Boundable<u8> for u8 {
fn max_value() -> u8 { u8::MAX }
}
当我将
impl
转换为宏时,为什么需要像这样用尖括号括起来类型本身?macro_rules! impl_boundable {
($a:ty) => {
impl Boundable<$a> for $a {
fn max_value() -> $a { <$a>::MAX }
}
};
}
impl_boundable!(i8);
尤其是 <$a>::MAX
。没有它,编译器会报错 missing angle brackets in associated item path
。让我困惑的是为什么宏代码需要与非宏代码不同。
<&T>::func()
和&T::func()
是不同的东西。 - kmdrekoty
,而不是expr
,所以即使它是&T
,也无法重新解析为(部分)表达式。 - trent