我几乎可以肯定以前曾以多种方式询问过这个问题。但我不确定要搜索什么。
我正在尝试编写一个在Integer
上运行的教师函数,因为整数可以是BigInts
我想尝试尽可能多地使用引用。当然还要更好地了解如何使用生命周期和参考文献。
代码看起来像这样
pub fn faculty<T>(mut n: T) -> T
where
T: num::Integer + num::Unsigned + MulAssign<&T> + SubAssign<&T>,
{
let one: T = T::one();
let mut result: T = T::one();
while n > one {
result *= &n;
n -= &one;
}
result
}
然而,编译器告诉我,我缺少MulAssign
和SubAssign
的生命周期说明符,并且似乎有点关闭将生命周期参数添加到既不接受引用也不返回的函数之一。
我尝试过像
这样的事情pub fn faculty<'a, 'b, 'c, T: 'c>(mut n: T) -> T
where
T: num::Integer + num::Unsigned + MulAssign<&'a T> + SubAssign<&'b T>,
哪个给出错误&#34;参数类型T
可能活不够长&#34;。
那么,如何正确编写我的函数,以便在代码中使用result *= &n;
之类的操作?