这段rust代码返回值和match匹配不符,请问什么问题,怎么改,谢谢?-灵析社区

强哥喝假酒

async fn get_block(client: &Arc>, block_number: U64) -> Result, Box> { let block: Option>; let new_block_number: U64; if block_number == U64::from(0) { block = client.get_block(BlockNumber::Latest).await?; } else { block = client.get_block(block_number).await?; } match block { Some(b) => { if let Some(number) = b.number { new_block_number = number + 1; Ok(Some(BlockAndNumber { block: b, number: new_block_number })) } else { Err("Block number is None".into()) } }, None => { // 块不存在,返回 None Ok(None) }, } } fn main() { let result = get_block(&client, block_number).await?; match result { Ok(Some(block_and_number)) => { }, Ok(None) => { }, Err(e) => { println!("err: {}", e); } } } 各位好,我在get_block里 返回的是result 一个option和一个err,但是 在下面调取的时候,match result {} 我定一个ok 和 err报错,提示result的类型是个Option 理论上应该是result才对,想问我的代码哪里有问题,新手rust,还请各位多多帮助 这段代码有什么问题,怎么改

阅读量:161

点赞量:0

问AI
去掉 "?" . "rust-by-example: ?" (https://link.segmentfault.com/?enc=Yak0R07wQRISuNvMaRe7Gg%3D%3D.GKkF7rOTkNfRBbJuEQtwImtnT7sZbKxapJXd8%2B%2FEFa8BKNF%2FfwmbNHBMozywyPJAZKOAe5T281QZ0TFWUhCm77qtFWjinXm7IVxWG5eDlyk%3D) ? 会取出 "Ok(val)" 中的值。如果是 "Err(e)" ,那么就 "?" 所在的函数就会直接返回这个错误。"foo?" 大致相当于: match foo { Err(e) => return Err(From::from(err)), Ok(val) => val, } 所以你程序里的 "result" 就已经变成 "Option" 了。