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

Rust中为子Trait实现IndexMut时能否复用超Trait的Index实现

答案

可以实现,不需要显式为dyn IndexableMut单独编写Index<usize>的实现。

原理说明:

  • IndexMut trait 本身要求实现者必须先实现Index trait,但是你可以通过调整原有Index实现的作用范围,让dyn IndexableMut自动获得Index的实现。
  • 你原本的Index实现仅作用于dyn Indexable这一种trait对象类型,而dyn IndexableMut是另一种独立的trait对象,不会自动继承这个实现。只要把原有Index的实现改成泛型形式,覆盖所有实现了Indexable trait的未定长类型,所有满足Indexable约束的类型(包括dyn IndexableMut,因为IndexableMut继承自Indexable)就都会自动获得Index的实现。
  • 额外提醒:你示例中IndexMut的方法名写错了,应该是index_mut而非index。

可正常编译的完整代码示例:

use std::ops::{Index, IndexMut};

trait Indexable {
    fn get(&self, index: usize) -> &bool;
}

trait IndexableMut: Indexable {
    fn get_mut(&mut self, index: usize) -> &mut bool;
}

// 调整原有Index实现的作用范围
impl<T: Indexable + ?Sized> Index<usize> for T {
    type Output = bool;
    fn index(&self, index: usize) -> &Self::Output {
        self.get(index)
    }
}

// 直接实现IndexMut即可,不需要额外给dyn IndexableMut写Index实现
impl IndexMut<usize> for dyn IndexableMut {
    fn index_mut(&mut self, index: usize) -> &mut Self::Output {
        self.get_mut(index)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:15:00