【发布时间】:2016-06-14 15:53:50
【问题描述】:
使用以下功能时:
fn factors(number: &BigInt) -> Vec<BigInt> {
let mut n = number.clone();
let mut i: BigInt = ToBigInt::to_bigint(&2).unwrap();
let mut factors = Vec::<BigInt>::new();
while i * i <= n {
if (n % i) == ToBigInt::to_bigint(&1).unwrap() {
i = i + ToBigInt::to_bigint(&1).unwrap();
}
else {
n = n/i as BigInt;
factors.push(i);
}
i = i + ToBigInt::to_bigint(&1).unwrap();
}
if n > i {
factors.push(n);
}
factors
}
每次使用i 或n 时都会出现移动值错误,从while 的行开始,也在if 中。我读过关于借贷的书,我理解得体,但这件事我不明白。
我根本没有“复制”这个值,所以我看不到任何地方我可能会失去对变量的所有权。
【问题讨论】:
-
BigInt 是什么类型?它来自哪个板条箱?
-
哦,对不起,来自
num。它是一个很大的 int,它没有实现Copy特征,因为这将非常、非常、非常占用 CPU 时间。 (我知道我也在这里复制它,我无法为我的生活找到更好的解决方案) -
啊,不用道歉,只是想知道他们是哪种类型。
标签: rust