我正在尝试在Rust中编写一个简单的TCP echo服务器,我对如何将匹配的值返回到Err感到困惑.
我知道返回类型应该是usize,并且我想返回零.在其他语言中,我只是,return 0;但Rust不会让我.我也试过了usize::Zero().我确实通过这样let s:usize = 0; s做得到它,但这看起来非常愚蠢,我想有更好的方法来做到这一点.
let buffer_length =  match stream.read(&mut buffer) {
    Err(e) => {
         println!("Error reading from socket stream: {}", e);
         // what do i return here?
         // right now i just panic!
         // return 0;
    },
    Ok(buffer_length) => {
        stream.write(&buffer).unwrap();
        buffer_length
    },
};
我知道我也可能只是没有match返回任何内容并且buffer_length在match函数调用之内消耗,但在这种情况下我不想这样做.
处理这样的事情最常用的方法是什么?
oli*_*obk 11
与buffer_length从Ok手臂内部"返回"的方式相同,只需将尾随表达式保留为不带分号,即可0从Err手臂"返回"a return.
return总是从函数返回.如果你想获得表达式的值,那么在Rust中你无需做任何事情.这总是自动发生.
这与您的let s = 0; s解决方法有效的原因相同.您所做的只是插入一个临时变量,但您也可以直接让表达式转发到外部表达式.
let buffer_length = match stream.read(&mut buffer) {
    Err(e) => {
         println!("Error reading from socket stream: {}", e);
         0
    },
    Ok(buffer_length) => {
        stream.write(&buffer).unwrap();
        buffer_length
    },
};
| 归档时间: | 
 | 
| 查看次数: | 5145 次 | 
| 最近记录: |