{ { let h = "hello";-6ren">
gpt4 book ai didi

rust - 在 Rust "macro_rules"宏中的调用站点使用本地绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 11:36:59 26 4
gpt4 key购买 nike

考虑以下代码段:

macro_rules! quick_hello {
($to_print:expr) => {
{
let h = "hello";

println!("{}", $to_print)
}
}
}

fn main() {
quick_hello!(h);
}
如果我编译它,我会得到:
error[E0425]: cannot find value `h` in this scope
--> src/main.rs:12:18
|
12 | quick_hello!(h);
| ^ not found in this scope
但不应该 quick_hello来电 main展开到包含 let h = "hello" 的 block 声明,从而允许我在调用站点将其用作“你好”的速记?
我可能会知道这样做是为了保持宏的卫生,但是如果我需要上述行为怎么办?有没有办法“关闭”卫生来实现这一目标?

最佳答案

处理quick_hello调用rustc正在寻找 有效 $to_print:expr 的表达式.但是h在该上下文中不是有效的表达式,所以 rustc不会继续执行宏实现并打印错误。

关于rust - 在 Rust "macro_rules"宏中的调用站点使用本地绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63937581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com