3
我想實現一個迭代器,它將產生素數。我已經在Vec<u64>
中找到了素數。無法從實現修改結構字段:「不能借用不可變的借來的內容作爲可變」
這裏是我的實現:
struct Primes {
primes: Vec<u64>,
}
impl Primes {
fn new() -> Primes {
Primes { primes: vec!(2, 3) }
}
fn iter(&self) -> PrimesIterator {
PrimesIterator { primes: &self.primes, index : 0 }
}
}
struct PrimesIterator<'a> {
primes: & 'a Vec<u64>,
index: usize,
}
impl<'a> Iterator for PrimesIterator<'a> {
type Item = u64;
fn next(&mut self) -> Option<u64> {
if self.index < self.primes.len() {
let result = self.primes[self.index];
self.index += 1;
Some(result)
} else {
let mut n = *self.primes.last().unwrap();
loop {
n += 2;
if is_prime(self.primes, n) {
self.primes.push(n);
self.index += 1;
return Some(n);
}
}
}
}
}
fn is_prime(primes: &[u64], n: u64) -> bool {
for &p in primes.iter() {
if n % p == 0 {
return false;
}
if p * p > n {
return true;
}
}
return false;
}
,但是當我試圖編譯它,我收到以下錯誤:
main.rs: error: cannot borrow immutable borrowed content `*self.primes` as mutable
main.rs: self.primes.push(n);
我宣佈自己爲& MUT所以我不我真的明白這裏有什麼問題以及如何解決這個問題。