是否可声明允许实现时添加未声明方法的Rust trait?
关于Rust中Trait实现的方法定义问题
结论:不行,Rust不允许这种写法
你给出的代码会触发编译错误,因为Rust规定:为类型实现某个trait时,impl块里只能写该trait本体中声明过的成员方法(包括默认方法),不能额外添加没在trait里定义的新方法。
正确的做法是把这些额外方法放在类型自身的impl块里,而不是trait的impl块中:
pub trait MyTrait { // 未定义任何方法 } // 类型专属的impl块,存放该类型的固有方法 impl MyType { fn method_one_not_declared_neither_defined(&self) { // 方法实现逻辑 } fn method_two_not_declared_neither_defined(&self) { // 方法实现逻辑 } } // 单独实现trait,这里只处理trait约定的内容 impl MyTrait for MyType {}
这么做的原因很明确:trait的作用是定义一套公共接口,对应的impl块只负责实现这套接口的内容;而类型自身的方法属于该类型独有的功能,放在自身impl块里既符合语法规则,代码结构也更清晰。
内容的提问来源于stack exchange,提问作者Alex Vergara
相关产品推荐
相关产品推荐

