gpt4 book ai didi

rust - 宏生成代码中未使用的变量

转载 作者:行者123 更新时间:2023-11-29 08:00:26 25 4
gpt4 key购买 nike

我已经编写了一个宏,它在 Rust 中实现了类似 Scala 的推导式。它会变成这样:

map_for!{
x <- 0..4;
y = 2*x;
z <- 0..1;
=> y+z
}

进入这个:

((0..4).map (move |x| { let y = 2 * x; (x, y) }))
.flat_map (move |params| {
let (x, y) = params;
(0..1).map (move |z| { y + z })
})

这可行,但编译器会发出“未使用的变量”警告,因为 x 未在 flat_map 中使用。我可以通过在宏中的 let 语句之前添加 #[allow(unused_variables)] 来禁用警告,但随后它会删除 所有 未使用的变量警告这样:

map_for!{
x <- 0..4;
y = 2;
z <- 0..1;
=> y+z
}

将扩展为:

((0..4).map (move |x| { let y = 2; (x, y) }))
.flat_map (move |params| {
#[allow(unused_variables)]
let (x, y) = params;
(0..1).map (move |z| { y + z })
})

即使 x 确实未被使用,也不会生成警告。

有没有办法让第一个示例不会生成警告,而第二个示例会生成警告?

full code of the macro with warnings是可用的,因为是 full code with warnings suppressed .

最佳答案

我能想到的最简单的方法是通过使用一些惰性操作来确保使用 x 。例如,您可以使用 drop(&x); 或者 {let _ = &x;}。这些都不会对周围的代码产生任何影响,因为它们都创建并立即放弃了借用。

关于rust - 宏生成代码中未使用的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44722279/

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