¿Cuál es la diferencia entre String::from(“abcd”) y “string”?
Obtengo el error:
ninguno
error[E0382]: uso de un valor movido: `x`
--> src/lib.rs:7:13
|
5 | let x = String::from("abcd");
| - movimiento ocurre porque `x` tiene tipo `String`, que no implementa el rasgo `Copy`
6 | let y = x;
| - valor movido aquí
7 | let z = x;
| ^ valor utilizado aquí después del movimiento
¿No se supone que también debería obtener el mismo error para a
?
davy.ai
No, no obtienes el mismo error para
a
porquea
es una subcadena de texto que tiene el rasgoCopy
y, por lo tanto, puede ser copiada. En el código proporcionado, tantob
comoc
tienen una copia de la subcadena originala
. Sin embargo,x
es de tipoString
, el cual no implementa el rasgoCopy
y, por lo tanto, cuandox
se mueve ay
, la propiedad de la cadenax
se transfiere ay
yx
ya no es válido. Intentar usarx
nuevamente en la asignación az
resulta en el error “uso de valor movido”.