我想匹配,例如一个ident
的类型来实现某种特征,我该怎么做?
这是(不完整)代码的基本思想:
macro_rules! has_trait {
($ ($t : ty), ($x : ident),) => {
}
}
fn trait_test() {
let a = vec![1, 2, 3];
let b = 42;
let a_iteratable = has_trait!(IntoIterator, a);
let b_iteratable = has_trait!(IntoIterator, b);
println!("{:?} iterable? {}", a, a_iteratable);
println!("{:?} iterable? {}", b, b_iteratable);
}
我无法理解如何说“任何具有特征的类型Foo
".
我看到有两种解决问题的选择:
- 查找与具有特征的任何类型相匹配的匹配表达式
$t
并简单地在匹配时返回 true,否则(其他如何工作?) false。
- 在任何类型的匹配体中,使用一些代码来确定是否为特征
$t
是由类型实现的$x
.
我不知道如何执行这两个选项中的任何一个。
这还可以吗?
恐怕这里对宏可以做什么和不能做什么存在严重的误解。
在 Rust 中,宏作用于 AST(Abstract 的缩写)Syntax树。这意味着它可以访问句法的仅供参考)。
这意味着宏可以执行的任何操作,无需宏也可以执行。一个宏是just语法糖以避免一遍又一遍地编写样板。
相反,如果没有宏就无法完成某件事,那么使用宏也无法完成该任务。
我并不清楚这些信息是否可用(证明负面信息总是那么困难),但是可以肯定的是,宏的使用不会影响这种可用性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)