Это похоже на компиляцию, но это очень уродливо. Есть ли способ упростить это?
enum Foo<'a> {
Foo1(Option<&'a mut Foo<'a>>),
Foo2(i16),
}
impl<'a> Foo<'a> {
fn bar(&'a mut self, y: i16) -> (i16, &'a mut Foo<'a>) {
match (&mut *self, y) {
(Foo::Foo1(Some(ref mut a)), b) if (b == 5) => {
return a.bar(y)
},
(self2, c) => {
let n = match (&mut *self2 , c) {
(Foo::Foo2(ref mut a), b) if (b == 5) => {
print!("is five");
*a = (b + 42) as i16;
*a * b
},
ref mut x => {
print!("is not five!");
y
}
};
return (n, self2)
}
}
}
}
Просто замените return
в вашем get_all_files
на yield
. Это позволит вам перебирать каждый файл.
def get_all_files(to_download):
for year in [2000, 2001, 20002, 2003]:
content = download_file(year)
result = retrieve_file(content,
to_download,
'file-%s.pdf' % year)
yield result