я не понимаю, почему rustc дает мне эту ошибку error: use of moved value: 'f'
во время компиляции, с помощью следующего кода:Почему я не могу повторно использовать заимствованный указатель FUNTION в
fn inner(f: &fn(&mut int)) {
let mut a = ~1;
f(a);
}
fn borrow(b: &mut int, f: &fn(&mut int)) {
f(b);
f(b); // can reuse borrowed variable
inner(f); // shouldn't f be borrowed?
// Why can't I reuse the borrowed reference to a function?
// ** error: use of moved value: `f` **
//f(b);
}
fn main() {
let mut a = ~1;
print!("{}", (*a));
borrow(a, |x: &mut int| *x+=1);
print!("{}", (*a));
}
Я хочу, чтобы повторно закрыть после того, как я прохожу это как аргумент другой функции. Я не уверен, является ли это копией или закрытием стека, есть ли способ рассказать?
Этот фрагмент был для rustc 0.8. Мне удалось скомпилировать другую версию кода с последним rustc (master: g67aca9c), изменив &fn(&mut int)
на простой fn(&mut int)
и используя обычные функции вместо закрытия, но как я могу заставить это работать с закрытием?
Я прочитал [Детективная работа по закрытию ржавчины] (http://blog.pnkfx.org/blog/2013/06/07/detective-work-on-rust-closures/), но я не совсем понимаю это еще. –