2015-08-17 7 views
7

के कारण कॉलबैक पैरामीटर के रूप में स्वयं को पास नहीं कर सकता है मैं एक संरचना के अंदर सहेजा गया बंद करने का प्रयास कर रहा हूं लेकिन मैं संरचना को बंद करने के लिए एक तर्क के रूप में भी पास करना चाहता हूं। कोड का विशिष्ट टुकड़ा यहां दिया गया है।डबल उधार

pub fn react(&mut self) -> &mut Button { 
    if let Some(ref mut c) = self.click_callback { 
      c(self); 
    } 
    self 
} 

ध्यान दें कि स्वयं एक Button और self.click_callback है एक Option<Box<Fn(&mut Button)>>

मैं क्या समझ "अगर दो" स्वयं उधार लेता है जब तक इसके दायरे समाप्त होता है से

तो है, लेकिन उसके बाद जब मैं एक तर्क के रूप आत्म पारित करने के लिए कोशिश यह इसे फिर से उधार लेने का प्रयास करता है। क्या कोई ऐसा विशिष्ट है जो मैं कर सकता हूं जो इस डबल उधार प्रयास से बच जाएगा?

उत्तर

8

सरल समाधान कॉलबैक तो की तरह, self से बाहर तोड़ने के लिए है:

let callback = self.click_callback.take(); 
if let Some(ref mut c) = callback { 
    c(self); 
} 
self.click_callback = callback; 
self 

यह अस्थायी रूप से None साथ click_callback बदल देता है, इसलिए क्यों आप इसे वापस डाल करने के लिए यह करने के बाद की है।

संबंधित मुद्दे