如何在Rust宏中Assert类型?

rsl1atfo  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(139)

我创建了一个宏函数my_macro

macro_rules! my_macro {
    ($param1:expr, $param2:expr) => {
        // ...
    };
}

怎么可能Assert$param1MyType类型?是否可能检查更复杂的东西,如Box<T>?甚至返回类型?
我找到了assert_type_eq,但是关于它的文档很混乱,我不知道如何使用它,或者它是否是完成任务的最佳方法。
我想将这些类型Assert添加到我的宏中,以便更容易地发现它是否被错误地使用。

0yg35tkg

0yg35tkg1#

将其赋给显式类型变量:

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
        }
    };
}

这样做的好处还在于确保$param1表达式只计算一次。

相关问题