编译器认为布尔变量未被使用

Compiler thinks boolean variable is unused

我正在研究 Rust 的会话类型,我有一个非常简单的函数可以执行以下操作:

fn srv(c: Chan<(), Server>){
    let (c, n) = c.recv();
    let tmp = false;
    if n % 2 == 0 {
        let tmp = true;
    } else {
        let tmp = false;
    }
    let c = c.send(tmp);
    
    let (c, s) = c.recv();

    println!("server side: {}", s);


    c.close();
}

当我尝试编译它时,rust 编译器认为 tmp 变量未被使用。 这对我来说似乎很奇怪,因为我将它传递给 recv 函数。

warning: unused variable: `tmp`
  --> src/main.rs:25:13
   |
25 |         let tmp = false;
   |             ^^^ help: if this is intentional, prefix it with an underscore: `_tmp`

我尝试通过使其可变来玩弄它,但这没有帮助。

如果我打印它,警告就会消失。但是为什么当我用它来发送功能时它甚至在那里?

since I am passing it to the recv function.

不,那是在 if/else 范围之外定义的另一个 tmp

你想要什么:

let mut tmp = false;
if n % 2 == 0 {
    tmp = true;
} else {
    tmp = false;
}

或:

let tmp;
if n % 2 == 0 {
    tmp = true;
} else {
    tmp = false;
}

或:

let tmp = if n % 2 == 0 {
    true
} else {
    false
};

或:

let tmp = n % 2 == 0;