मैं एक enum संस्करण को अपडेट करना चाहते हैं, जबकि किसी भी क्लोनिंग के बिना नया एक के लिए पुराने संस्करण के एक क्षेत्र से आगे बढ़ के क्षेत्र बढ़ रहा है:बदलें, जबकि नए संस्करण
enum X {
X1(String),
X2(String),
}
fn increment_x(x: &mut X) {
match x {
&mut X::X1(s) => {
*x = X::X2(s);
}
&mut X::X2(s) => {
*x = X::X1(s);
}
}
}
इसका कारण यह है काम नहीं करता है हम &mut X
से s
स्थानांतरित नहीं कर सकते हैं।
कृपया enum X { X1, X2 }
को लागू करने और struct S { variant: X, str: String }
आदि का उपयोग करने जैसी चीजों का सुझाव न दें। यह एक सरलीकृत उदाहरण है, कल्पना करें कि कई अन्य फ़ील्ड वेरिएंट में हैं, और एक फ़ील्ड को एक संस्करण से दूसरे में ले जाना चाहते हैं।
'स्ट्रिंग' के मामले में, आप' मेम कोई रिक्त स्ट्रिंग क्षेत्र में replace' :: सकते हैं, और परिणाम का उपयोग नया संस्करण बनाने के लिए। बस कुछ चालें। लेकिन यह केवल उन प्रकारों के लिए काम करता है जिनमें खाली तार जैसे सस्ते रूप होते हैं। –