如何在循环中将 lines() 迭代器作为参数传递给函数
How to pass lines() iterator as an argument to a function, in a loop
这是开头:
let fb = BufReader::new(&f);
let lines = fb.lines();
let bank_sequence = read_1_sequence(&mut count, lines);
print_seq(&bank_sequence);
这里是 read_1_sequence 函数:
fn read_1_sequence<B: BufRead>(count: &mut u8, lines: Lines<B>)
// ...
for line in lines {
let the_line = line.unwrap();
if the_line.len() > 0 {
let first = &the_line[0..1];
if first == ">" {
// etc.
但是,如果对 read_1_sequence 的调用处于循环中,如下所示:
loop {
let bank_sequence = read_1_sequence(&mut count, lines);
print_seq(&bank_sequence);
}
我收到(显然)消息:
26 | let lines = fb.lines();
| ----- move occurs because `lines` has type `std::io::Lines<BufReader<&File>>`, which does not implement the `Copy` trait
...
29 | let bank_sequence = read_1_sequence(&mut count, lines);
| ^^^^^ value moved here, in previous iteration of loop
有解决办法吗?感谢您的任何提示。
祝你(编程)愉快!
其他答案建议克隆 lines
,但这行不通,因为 Lines
没有实现 Clone
(如果实现了,它可能会从每个循环中文件的开头)。相反,您应该将函数更改为 &mut Lines<B>
:
fn read_1_sequence<B: BufRead>(count: &mut u8, lines: &mut Lines<B>)
并这样称呼它:
loop {
let bank_sequence = read_1_sequence(&mut count, &mut lines);
print_seq(&bank_sequence);
}
这是开头:
let fb = BufReader::new(&f);
let lines = fb.lines();
let bank_sequence = read_1_sequence(&mut count, lines);
print_seq(&bank_sequence);
这里是 read_1_sequence 函数:
fn read_1_sequence<B: BufRead>(count: &mut u8, lines: Lines<B>)
// ...
for line in lines {
let the_line = line.unwrap();
if the_line.len() > 0 {
let first = &the_line[0..1];
if first == ">" {
// etc.
但是,如果对 read_1_sequence 的调用处于循环中,如下所示:
loop {
let bank_sequence = read_1_sequence(&mut count, lines);
print_seq(&bank_sequence);
}
我收到(显然)消息:
26 | let lines = fb.lines();
| ----- move occurs because `lines` has type `std::io::Lines<BufReader<&File>>`, which does not implement the `Copy` trait
...
29 | let bank_sequence = read_1_sequence(&mut count, lines);
| ^^^^^ value moved here, in previous iteration of loop
有解决办法吗?感谢您的任何提示。
祝你(编程)愉快!
其他答案建议克隆 lines
,但这行不通,因为 Lines
没有实现 Clone
(如果实现了,它可能会从每个循环中文件的开头)。相反,您应该将函数更改为 &mut Lines<B>
:
fn read_1_sequence<B: BufRead>(count: &mut u8, lines: &mut Lines<B>)
并这样称呼它:
loop {
let bank_sequence = read_1_sequence(&mut count, &mut lines);
print_seq(&bank_sequence);
}