如何在 Rust 宏中断言类型?

Ite*_*tor 3 rust

我创建了一个宏函数my_macro

macro_rules! my_macro {
    ($param1:expr, $param2:expr) => {
        // ...
    };
}
Run Code Online (Sandbox Code Playgroud)

如何断言这$param1是类型MyType?是否可以检查更复杂的内容,例如Box<T>?或者甚至返回类型?

我找到了assert_type_eq,但有关它的文档很混乱,而且我不知道如何使用它。或者这是否是完成任务的最佳方法。

我想将这些类型断言添加到我的宏中,以便更容易地找出它是否使用不正确。

Col*_*Two 6

将其分配给显式类型变量:

macro_rules! my_macro {
    ($param1:expr, $param2:expr) => {
        {
            let param1: u64 = $param1; // compiling will throw an error
                                       // if the result isn't a u64
            let param2: u64 = $param2;
            
            param1 + param2
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

这还有一个好处是可以确保表达式$param1只计算一次。