从Index <>特征实现返回错误-类型不匹配

时间:2020-06-25 14:40:58

标签: rust

我正在尝试为结构实现IndexIndexMut特征。 Index特征的实现如下:

impl Index<Registers> for RegisterCollection {
    type Output = std::result::Result<i32, CpuError>;

    fn index(&self, index: Registers) -> &Self::Output {
        if !&self.registers.contains_key(&index) {
            return Err(CpuError::InvalidRegisterId);
        }

        Ok(self.registers[&index].get_value_ref())
    }
}

registers是由寄存器ID(从Registers枚举)到Register结构的索引的HashMap。如果我在此处添加它们,这些细节可能会使事情感到困惑。 get_value_ref()返回对Register结构的value字段的引用。该字段不是公共的,因为访问是由权限控制的,如果该字段是公共的,则不能强制执行。

我得到的错误如下:

mismatched types
expected reference &std::result::Result<i32, cpu::CpuError>
    found enum std::result::Result<_, cpu::CpuError>
to return impl Trait, all returned values must be of the same type

这使我感到困惑,因为它似乎是正确的,并且我在这里所做的与在其他地方所做的相似。如果有人能在这里解释我在做什么错,并指出如何解决该问题的方向,那将不胜感激。

0 个答案:

没有答案
相关问题