You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何判断返回错误是否匹配自定义错误的指定变体

错误原因

downcast_ref的泛型参数要求传入完整类型,而XError::TagNotFound是枚举XError的内部变体,本身不属于类型,因此不符合语法要求。Rust的trait对象向下转型是基于类型ID实现的,只能识别到整个枚举的类型,无法直接定位到枚举的单个变体。

正确实现

你需要先把错误对象向下转型为&XError类型,再判断变体是否为TagNotFound,示例代码如下:

// 写法1:拆分步骤更清晰
let err = validate(param).unwrap_err();
let x_error = err.downcast_ref::<XError>();
assert!(matches!(x_error, Some(XError::TagNotFound)));

// 写法2:链式调用更紧凑
assert!(matches!(
    validate(param).unwrap_err().downcast_ref::<XError>(),
    Some(XError::TagNotFound)
));

注意事项

要使用downcast_ref方法,要求目标类型满足'static生命周期约束,你的XError枚举没有持有非静态引用,默认满足该约束,可以直接使用。

内容的提问来源于stack exchange,提问作者Axel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:57:02