【发布时间】:2023-01-07 05:27:23
【问题描述】:
我创建了一个宏函数my_macro:
macro_rules! my_macro {
($param1:expr, $param2:expr) => {
// ...
};
}
怎么可能断言$param1 是类型MyType?是否可以检查更复杂的东西,比如Box<T>?甚至返回类型?
我找到了assert_type_eq,但是关于它的文档很混乱,而且我不知道如何使用它。或者它是否是完成任务的最佳方法。
我想将这些类型断言添加到我的宏中,以便更容易发现它是否被错误使用。
【问题讨论】:
-
如果
$param1应该是MyType,为什么首先要将它作为参数?只需在宏中直接使用MyType。 -
宏扩展发生在任何类型之前,因此您最好的希望是让您的宏生成一些稍后检查类型的代码。
let p1: MyType = $param1;之类的东西可以,assert_type_eq也可以。 -
我相信 @kaya3 用
let指出的是惯用的,从我在野外看到的。
标签: rust