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

问题描述

我正在寻找一种处理这种情况的好方法。在检查给定变量是否正确类型/包含我期望的内容后,我想继续进行进一步的操作。问题是我想重用匹配的变量。

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 语句有什么好处吗?

解决方法

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

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