我试图写一个宏来计算各种函数执行的时间。
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中是否不可能有这样的通用宏?
答案 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
}
}
}