如何为需类型注解的元组使用if let Ok()语法?
在Rust中正确对bincode的decode_from_slice结果使用if let Ok语法
你尝试的写法报错,是因为Rust不允许在if let的模式匹配里直接给元组加类型注解。要解决这个问题,有两种常用的正确写法:
方法一:给decode_from_slice添加泛型类型注解(推荐)
利用Rust的turbofish语法,直接指定decode_from_slice要解码的结构体类型,编译器会自动推导其他泛型参数:
struct A { a: i32, b: i32, } let recv_buff = [0u8; 1024]; if let Ok((a_obj, _)) = bincode::decode_from_slice::<A, _>( &recv_buff, bincode::config::standard().with_big_endian() ) { // 在这里使用a_obj }
方法二:先绑定结果到带类型注解的变量
如果不习惯turbofish,可以先把解码结果赋值给一个明确类型的变量,再进行模式匹配:
struct A { a: i32, b: i32, } let recv_buff = [0u8; 1024]; let decode_result: Result<(A, usize), _> = bincode::decode_from_slice( &recv_buff, bincode::config::standard().with_big_endian() ); if let Ok((a_obj, _)) = decode_result { // 在这里使用a_obj }
错误原因说明
你原来的写法Ok((a_obj, _): (A, usize))不符合Rust的模式匹配语法规则——模式本身不能附带类型注解,类型信息需要通过函数泛型参数或者变量类型注解来提供。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

