在 match 语句中重用匹配的变量

Reusing matched variable inside of match statement

我正在寻找处理此类情况的良好模式。我想在检查给定变量是否正确 type/contains 我所期望的之后继续进一步的操作。问题是我想重用匹配的变量。

fn proceed(stream: std::net::TcpStream) {
    // ...
}

fn main() {
    let mut stream = TcpStream::connect("127.0.0.1:7878");

    match stream {
       TcpStream => proceed(stream.unwrap()),
       Error => println!("buuuu")
   }
}

它给我 variable used after move 错误。通过创建带有移动的闭包来盲目修复会导致更多的级联错误。在这种情况下使用 match 语句有什么好处吗?

您可以对 ResultOk 变体进行模式匹配:

use std::net::TcpStream;

fn proceed(stream: TcpStream) {
    todo!()
}

fn example() {
    let mut stream = TcpStream::connect("127.0.0.1:7878");

    match stream {
       Ok(tcp) => proceed(tcp),
       Err(err) => println!("buuuu"),
   }
}

playground