我有一個包含值的結構,我想獲得該值進行動作的功能:如何返回具有對結構的引用的閉包?
struct Returner {
val: i32,
}
impl<'a> Returner {
fn get(&'a self) -> Box<Fn(i32) -> i32> {
return Box::new(|x| x + self.val);
}
}
這種失敗編譯:「類型[關閉...]不符合要求的一生」 。這是因爲閉包借用了self
,這對我來說很好,因爲我不打算在struct被銷燬後使用獲得的函數。從我至今雲集,有兩種方法可以使人們有可能:
使用
move
關鍵字。我不想使用它,因爲它將獲取對象的所有權,並且希望在它返回此函數後使用它。顯式指定閉包的生命週期以告訴編譯器它具有與從其調用的結構相同的生命週期。
我認爲2是一種正確的方式在我的情況,但我一直無法找到如何指定閉包的生命週期。有沒有直接的方式來做到這一點,或者我有這一切錯誤,它與Rust生存邏輯相矛盾?
是我還是這''<'a>應佩戴'GET'而不是'impl'? –
@MatthieuM。你是對的,應該的。它恰好在這裏沒有什麼區別,因爲''a'不會在其他地方出現,但對於量詞來說確實是錯誤的地方。 – delnan
@ Matthieu M.我已經檢查了兩種方式,結果是一樣的。 – Month