我意识到这样做在Rust中不起作用,因为它抛出tempNot Found错误,因为看起来#[cfg(not(feature = "my-feature"))]左右的花括号创建了一个新的作用域,对吗?

fn main() {
    #[cfg(not(feature = "my-feature"))] {
        let temp: usize = 1;
    }
    
    let mut output = 0;
    
    #[cfg(not(feature = "my-feature"))]
    output = temp + 1;
    
    println!("output: {:?}", output);
}

但是,在不引入新的作用域(即稍后重用现有变量)的情况下,在Rust中使用功能标志将多行包含起来的正确方法是什么呢?

推荐答案

您可以利用/滥用块是表达式这一事实来编写类似的代码.

#[cfg(stuff)]
let (x, y, z) = {
  let x = ...;
  let y = ...;
  let z = ...;

  (x, y, z)
}

let mut output = 0;

#[cfg(stuff)]
println!("{x}, {y}, {z}");

这并不美观,但总比每行加#[cfg(stuff)]要好

Rust相关问答推荐

为什么`Vec i64`的和不知道是`Option i64`?

如何指定不同的类型来常量Rust中的泛型参数?

`RwLockWriteGuard_,T`不实现T实现的特征

程序在频道RX上挂起

由于生存期原因,返回引用的闭包未编译

Tokio';s io::用Cursor拆分<;Vec<;u8>>;赢得';t get the full writted data

Rust LinkedList 中的borrow 判断器错误的原因是什么?

.to_owned()、.clone() 和取消引用 (*) 之间有区别吗?

Rust FFI 和 CUDA C 性能差异

在描述棋盘时如何最好地使用特征与枚举

Rust: 目标成员属于哪个"目标家族"的列表是否存在?

使用 Rust 从 Raspberry Pi Pico 上的 SPI 读取值

Rust 函数指针似乎被borrow 判断器视为有状态的

更好的方法来模式匹配带有 Rust 的窥视孔装配说明窗口?

编写 TOML 文件以反序列化为 struct 中的枚举

如何制作具有关联类型的特征的类型擦除版本?

为什么 Rust 标准库同时为 Thing 和 &Thing 实现特征?

list 中没有指定目标 - 必须存在 src/lib.rs、src/main.rs、[lib] 部分或 [[bin]] 部分

如何从 Rust 应用程序连接到 Docker 容器中的 SurrealDB?

这个 match 语句的默认值应该是什么,还有一种方法可以解开 Some case (chess in rust)