【发布时间】:2015-03-01 22:43:48
【问题描述】:
我正在尝试计算 Rust 中的第 10,001 个素数(Project Euler 7),作为其中的一部分,我检查整数是否为素数的方法引用了一个向量:
fn main() {
let mut count: u32 = 1;
let mut num: u64 = 1;
let mut primes: Vec<u64> = Vec::new();
primes.push(2);
while count < 10001 {
num += 2;
if vectorIsPrime(num, primes) {
count += 1;
primes.push(num);
}
}
}
fn vectorIsPrime(num: u64, p: Vec<u64>) -> bool {
for i in p {
if num > i && num % i != 0 {
return false;
}
}
true
}
当我尝试引用向量时,出现以下错误:
error[E0382]: use of moved value: `primes`
--> src/main.rs:9:31
|
9 | if vectorIsPrime(num, primes) {
| ^^^^^^ value moved here, in previous iteration of loop
|
= note: move occurs because `primes` has type `std::vec::Vec<u64>`, which does not implement the `Copy` trait
我必须对primes 做什么才能在vectorIsPrime 函数中访问它?
【问题讨论】:
-
与问题正交:1) 分享 rust-playground 链接总是有用的。 2)逻辑不正确(count +=1)应该发生在外面。
标签: rust