我正在尝试为结构实现Index
和IndexMut
特征。 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
这使我感到困惑,因为它似乎是正确的,并且我在这里所做的与在其他地方所做的相似。如果有人能在这里解释我在做什么错,并指出如何解决该问题的方向,那将不胜感激。