Macros 如何定义传递(标识或NOP)宏?
从另一种语言移植代码时,我希望保留一些表达式,例如Macros 如何定义传递(标识或NOP)宏?,macros,rust,Macros,Rust,从另一种语言移植代码时,我希望保留一些表达式,例如可能/不可能宏作为伪宏 用法示例: if expr_nop!(expression) { code; } 。。。这应该与写作完全相同: if (expression) { code; } 在rust中,哪一个好的故障保护宏可以用作no op 目前我有: macro_rules! expr_nop { ($body:expr) => { $body } } 这是正确的还是应该以不同的方式编写?我认为您的宏 macro
可能
/不可能
宏作为伪宏
用法示例:
if expr_nop!(expression) {
code;
}
。。。这应该与写作完全相同:
if (expression) {
code;
}
在rust中,哪一个好的故障保护宏可以用作no op
目前我有:
macro_rules! expr_nop { ($body:expr) => { $body } }
这是正确的还是应该以不同的方式编写?我认为您的宏
macro_rules! expr_nop { ($body:expr) => { $body } }
。。。这是正确的
不过,它做了一件事:它检查宏的参数实际上是一个表达式。因此,例如,expr\u nop(i32)
将给出编译时错误,因为i32是一种类型而不是表达式(这通常是一件好事,否则if expr\u nop!(i32){…}
将给出编译时错误,而该错误可能更复杂)
在这两种情况下,错误都是在编译时发生的,但在第一种情况下是在宏扩展之前(在宏扩展期间),而在第二种情况下是在宏扩展之后,这通常使得将错误链接到您试图编译的代码变得更加困难。通过与identity函数的类比,调用此“identity宏”不是更好吗
no op
在我看来,它代表什么都不做,而不是保持表达式不变。@deniss,你可能是对的,我是这个术语的新手。与你的原始版本相关:。