我如何写一个性状来改变一个整数?



我正在尝试实现一个整数的特性,为自己添加一个值。

我的失败尝试:

impl TryAdd for u128 {
fn try_add(self, rhs: Self) -> Result<Self, ProgramError> {
self.checked_add(rhs).ok_or(SomeError::BadError.into())
}
fn try_self_add(mut self, rhs: Self) -> ProgramResult {
self = self.try_add(rhs)?;
Ok(())
}
}

第一个函数按预期工作,返回一个添加了rhs的新整数。第二个函数目前不起作用。

我想让它做什么:

#[test]
fn test_self_add() {
let x = 10;
let y = 2;
x.try_self_add(y).unwrap();
assert_eq!(x, 12);
}

有办法做到这一点吗?

try_self_add中,您修改值的副本而不是值本身,因此这是预期的行为(这也是为什么测试中的x不需要是mut)。你真正想要的是:

fn try_self_add(&mut self, rhs: Self) -> ProgramResult {
*self = self.try_add(rhs)?;
Ok(())
}

经过这样的修改后,它就像预期的那样工作了。

最新更新