错误:变量' x'仍然在这个深度重复

时间:2017-09-04 11:27:31

标签: macros rust

我试图写一个宏来计算各种函数执行的时间。

main p, main h2, main h3, main h4 {
  text-align: center;
}
.center {
  text-align: center;
}
.orange-button {
  padding: 10px;
  border: 1px solid black;
}

但编译器会抛出<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <main> <h4> Zapraszam! </h4> <div class="center"> <a class="orange-button" href="#"> Przejdź do strony głównej! </a> </div> </main> </body> </html>

在另一种静态类型语言中,我已尝试过(F#),使用闭包是最简单的方法。在Rust中是否不可能有这样的通用宏?

1 个答案:

答案 0 :(得分:4)

最直接的问题是,当扩展只能处理一个时,你要求宏解析一个或多个表达式的序列。所以只需询问即可。

其次,您希望扩展导致表达式,但您已将其编写为扩展为多个语句。要解决这个问题,请扩展到一个区块。

解决这些问题:

macro_rules! timer {
    ($x: expr) => {
        {
            let now = SystemTime::now();
            let val = $x;

            match now.elapsed() {
                Ok(elapsed) => {
                    // This should include a message at some point alongside the timing
                    println!("{}", elapsed.as_secs());
                }
                Err(e) => {
                    println!("{:?}", e);
                }
            }
            val
        }
    } 
}