Préstamo de óxido y referencia

Préstamo de óxido y referencia
Cada valor en un óxido tiene una variable que se conoce como su propietario. La regla de propiedad única de Rust afirma que solo puede haber un propietario a la vez.

Sin embargo, podemos encontrar instancias en las que necesitamos usar y modificar un valor temporalmente. Podemos lograr esto usando préstamos. El préstamo es un concepto que nos permite pedir prestado un valor, usarlo y una vez que hayamos terminado, devuélvelo a su propietario en el mismo estado que fue cuando lo tomamos prestado. Esto significa que los préstamos no cambian el valor original.

Pedimos prestado un valor haciendo referencia a él utilizando su dirección de memoria y el operador &. Luego podemos pasar la referencia a una función y usar el valor como vemos en forma.

Reglas de referencia

Hay dos reglas para trabajar con referencias en Rust:

  1. Puede tener referencias mutables o muchas referencias inmutables a la vez.
  2. Todas las referencias deben ser válidas.

Referencia de óxido y valor de préstamo

En Rust, usamos el operador y para hacer referencia a una dirección de valor. Un código de ejemplo es como se muestra a continuación:

fn main ()
Let String = String :: de ("Hola");
Str_len = get_str_length (& string);
println!("Longitud de cadena: ", str_len);

fn get_str_length (string: & string) -> usizar
cadena de retorno.len ();

En el código anterior, definimos una variable llamada "cadena". De acuerdo con las reglas de propiedad, esta variable posee el valor "hola".

Sin embargo, necesitamos usar esta variable en la función. Dado que un valor solo puede tener un propietario en un momento determinado, usarlo dentro de la función transferirá la propiedad. Como no queremos que la propiedad se transfiera a la función, tomamos prestado el valor utilizando haciendo referencia a su propietario.

Tenga en cuenta que agregamos el y operador en el tipo de parámetro de función. Esto le dice a Rust que estamos haciendo referencia al valor y que debemos devolverlo después de la finalización.

Referencias mutables

Si intentamos cambiar un valor prestado, el óxido dará como resultado un error. Tome el ejemplo a continuación:

fn main ()
Let String = String :: de ("Hola");
Change_Value (& String);

FN Change_Value (String: & String)
cadena.push_str ("mundo!")

Ejecutar el código anterior debe devolver un error como:

Esto se debe a que las referencias son inmutables por defecto. Por lo tanto, no podemos modificar un valor prestado.

Podemos tener una referencia mutable que nos permita modificar un valor prestado. Considere el código de ejemplo a continuación:

fn main ()
Let Mut String = String :: de ("Hello");
Change_Value (& Mut String);

FN Change_Value (String: & Mut String)
cadena.push_str ("mundo!")

En el ejemplo anterior, establecemos la variable "cadena" t ser mutable. Luego creamos una referencia mutable usando la cadena & Mut en la llamada de función. Tenga en cuenta que el parámetro de la función acepta una referencia mutable, lo que permite que la función cambie el valor prestado.

Nota: Como se mencionó, solo puede tener una referencia mutable en un momento particular. Intentar crear más de una referencia mutable lanzará un error como se muestra:

fn main ()
Let Mut String = String :: de ("Hello");
Let String2 = & Mut String;
Let String3 = & Mut String;
println!(" ", string2, string3);

FN Change_Value (String: & Mut String)
cadena.push_str ("mundo!")

El código anterior debe devolver un error como se muestra:

Esta característica puede ayudar a prevenir las condiciones de la carrera al tomar prestados y hacer referencia a los valores.

Conclusión

Este artículo proporciona una comprensión básica del uso y el trabajo con préstamos de óxido y características de referencia. Puede consultar los documentos para explorar más.