Rust trait实现时如何暂不指定关联类型规避编译器报错
你尝试的写法不可行,因为todo!()是生成值的表达式宏,只能出现在值的语法位置,而关联类型定义要求填入一个合法的类型,才会触发non-type macro in type position的报错。Rust不允许完全省略trait实现中的关联类型,也没有语法让编译器直接忽略关联类型缺失的错误,但你可以用以下几种临时占位的方案满足后续补充逻辑的需求:
方案1:用
!(永不返回类型)占位
示例实现:impl A for B { type C = !; }该类型可以兼容任意类型的转换要求,只要你暂时没有用到
C类型的相关逻辑,代码可以正常编译运行,等到你需要使用该关联类型时,编译器会提示你替换为正式的目标类型。方案2:用单元类型
()占位
示例实现:impl A for B { type C = (); }如果你开发阶段需要临时调用依赖该关联类型的方法做测试,单元类型不需要额外的构造逻辑,零成本使用,后续开发关联类型逻辑时替换即可。
方案3:给trait的关联类型设置默认值
如果你是当前trait的定义者,可以直接在定义阶段给关联类型设置默认值,后续实现trait时不需要手动声明也不会触发报错:trait A { type C = (); // 其余trait定义逻辑 } // 实现时不需要额外指定关联类型即可编译通过 impl A for B {}
内容的提问来源于stack exchange,提问作者Alberto Centelles
相关产品推荐
相关产品推荐

