yeni bir çeşidi ile alan taşıyarak:değiştir enum varyantı ise herhangi klonlama olmadan yenisine eski varyantın bir alan taşırken bir enum varyantı güncellemek istiyorum
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);
}
}
}
Bunun nedeni çalışmıyor s
'u &mut X
'dan kaldıramazız. Bir enum X { X1, X2 }
uygulanması ve bu basitleştirilmiş bir örnektir vb struct S { variant: X, str: String }
kullanmak gibi
önermek etmeyin şeyler varyantları diğer alanlara çok sahip ve başka bir varyantı olan bir alan taşımak isteyen düşünün.
String' 'durumunda ... yerine dışarı faktoring @Shepmaster için, sen' mem alana boş bir dize replace' ve sonucu kullanabilirsiniz :: edebilirsiniz yeni varyantı oluşturmak için. Sadece birkaç hamle. Ancak bu sadece boş dizeler gibi ucuz bir forma sahip türler için çalışır. –