У меня есть структура, которая содержит значение, и я хочу, чтобы получить функцию, которая работает на этом значении:Как вернуть замыкание со ссылкой на структуру?
struct Returner {
val: i32,
}
impl<'a> Returner {
fn get(&'a self) -> Box<Fn(i32) -> i32> {
return Box::new(|x| x + self.val);
}
}
Это терпит неудачу сборника: «типа [закрытие ...] не соответствует требуемой жизни» , Это связано с тем, что закрытие занимает self
, что прекрасно для меня, потому что я не намерен использовать полученную функцию после разрушения структуры. Из того, что я собрал до сих пор, есть два способа сделать это возможным:
Используйте
move
ключевое слово. Я не хочу использовать его, потому что он будет владеть объектом, и я хочу использовать его после того, как он вернул эту функцию.Явно указать время жизни замыкания, чтобы сообщить компилятору, что он имеет такое же время жизни, что и вызванная им структура.
Я думаю, что 2 является правильным способом в моей ситуации, но я не смог выяснить, как указать срок службы закрытия. Есть ли прямой способ сделать это, или я ошибаюсь, и это противоречит логике жизни Rust?
Это я или это '' <'a> должны украшать 'get' и не' impl'? –
@ MatthieuM. Вы правы, это должно быть. Это не имеет никакого значения здесь, потому что '' a' не встречается нигде, но это действительно неправильное место для квантификатора. – delnan
@ Matthieu M. Я проверил оба пути, результаты те же. – Month