traduccion ps4 lenguaje language juego variables syntax reference rust mutable

variables - ps4 - rust traduccion



¿Cuál es la diferencia entre colocar "mut" antes de un nombre de variable y después de ":"? (2)

Si viene de C / C ++, también podría ser útil pensar en esto básicamente así:

// Rust C/C++ a: &T == const T* const a; // can''t mutate either mut a: &T == const T* a; // can''t mutate what is pointed to a: &mut T == T* const a; // can''t mutate pointer mut a: &mut T == T* a; // can mutate both

Notarás que estos son inversos entre sí. C / C ++ adopta un enfoque de "lista negra", donde si quiere que algo sea inmutable, debe decirlo explícitamente, mientras que Rust adopta un enfoque de "lista blanca", donde si desea que algo sea mutable, debe decirlo explícitamente.

Aquí hay dos firmas de funciones que vi en la documentación de Rust:

fn modify_foo(mut foo: Box<i32>) { *foo += 1; *foo } fn modify_foo(foo: &mut i32) { *foo += 1; *foo }

¿Por qué la colocación diferente de mut ?

Parece que la primera función también podría declararse como

fn modify_foo(foo: mut Box<i32>) { /* ... */ }


mut foo: T significa que tienes una variable llamada foo que es una T Se le permite cambiar a qué se refiere la variable:

let mut val1 = 2; val1 = 3; // OK let val2 = 2; val2 = 3; // error: re-assignment of immutable variable

Esto también le permite modificar los campos de una estructura de su propiedad:

struct Monster { health: u8 } let mut orc = Monster { health: 93 }; orc.health -= 54; let goblin = Monster { health: 28 }; goblin.health += 10; // error: cannot assign to immutable field

foo: &mut T significa que tiene una variable que se refiere a ( & ) un valor y se le permite cambiar ( mut ) el valor referido (incluidos los campos, si es una estructura):

let val1 = &mut 2; *val1 = 3; // OK let val2 = &2; *val2 = 3; // error: cannot assign to immutable borrowed content

Tenga en cuenta que &mut solo tiene sentido con una referencia - foo: mut T no es una sintaxis válida. También puede combinar los dos calificadores ( let mut a: &mut T ), cuando tenga sentido.