【问题标题】:Returning value from macro_rules! in Rust [duplicate]从宏规则返回值!在锈 [重复]
【发布时间】:2019-06-04 12:27:38
【问题描述】:

我正在通过Rust by Examples - Macros/DSL

代码显示:

macro_rules! calculate {
    (eval $e:expr) => {{
        {
            let val: usize = $e; // Force types to be integers
            println!("{} = {}", stringify!{$e}, val);
        }
    }};
}

fn main() {
    calculate! {
        eval 1 + 2 // hehehe `eval` is _not_ a Rust keyword!
    }

    calculate! {
        eval (1 + 2) * (3 / 4)
    }
}

现在我希望我的自定义宏 calculate 返回计算值。我尝试了以下方法:

macro_rules! calculate {
  (eval $e:expr) => {{
    let val: usize = $e;
    println!("{} = {}", stringify!{$e}, val);
    val
  }};
}

但它返回我说error[E0308]: mismatched types in val, expected type (), found type i32的错误。

如何修改上述宏以返回计算值?谢谢。

【问题讨论】:

  • is 返回值,但您在预期 () 的上下文中使用宏(因为 main 返回 ())。尝试将结果分配给变量。
  • 我想我知道它有什么问题。在原始 src 代码中,它应该以分号结束每个 calculate! {...} 宏调用!感谢您的意见@FrancisGagné

标签: rust


【解决方案1】:

我想我知道它有什么问题。在原始 src 代码中,它应该以分号结束每个 calculate! {...} 宏调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多