Rustlån og referanser

Rustlån og referanser
Hver verdi i en rust har en variabel som er kjent som eieren. Rust enkelt eierregel sier at det bare kan være en eier om gangen.

Vi kan imidlertid møte forekomster der vi trenger å bruke og endre en verdi midlertidig. Vi kan oppnå dette ved hjelp av lån. Lån er et konsept som lar oss låne en verdi, bruke den, og når vi er ferdige, kan du returnere den tilbake til eieren i samme tilstand som det var da vi lånte den. Dette betyr at lån ikke endrer den opprinnelige verdien.

Vi låner en verdi ved å henvise den til ved å bruke minneadressen og operatøren. Vi kan deretter overføre referansen til en funksjon og bruke verdien som vi ser passform.

Referanseregler

Det er to regler for å jobbe med referanser i rust:

  1. Du kan ha enten mutable referanser eller mange uforanderlige referanser om gangen.
  2. Alle referanser må være gyldige.

Rust referanse og låne verdi

I rust bruker vi & operatøren for å referere til en verdiadresse. Et eksempelkode er som vist nedenfor:

fn main ()
La streng = streng :: fra ("Hei");
la str_len = get_str_length (& string);
Println!("Strenglengde: ", str_len);

fn get_str_length (String: & String) -> USIZE
Returstreng.len ();

I koden over definerer vi en variabel kalt “String”. I henhold til eierreglene eier denne variabelen verdien “Hei”.

Vi må imidlertid bruke denne variabelen i funksjonen. Siden en verdi bare kan ha en eier på et gitt tidspunkt, vil det å bruke den inne i funksjonen overføre eierskap. Siden vi ikke vil at eierskapet skal overføres til funksjonen, låner vi verdien ved å henvise til å henvise til eieren.

Merk at vi legger til & operatøren i funksjonsparametertypen. Dette forteller Rust at vi refererer til verdien og bør gi den tilbake etter fullføring.

Mutable referanser

Hvis vi prøver å endre en lånt verdi, vil rust føre til en feil. Ta eksemplet nedenfor:

fn main ()
La streng = streng :: fra ("Hei");
endring_value (& streng);

fn endring_value (streng: & streng)
streng.Push_str ("World!")

Å kjøre koden over skal returnere en feil som:

Dette er fordi referanser er uforanderlige som standard. Derfor kan vi ikke endre en lånt verdi.

Vi kan ha en mutabel referanse som lar oss endre en lånt verdi. Tenk på eksempelkoden nedenfor:

fn main ()
La Mut String = String :: fra ("Hello");
endring_value (& mutstreng);

fn endring_value (streng: & mut streng)
streng.Push_str ("World!")

I eksemplet over setter vi variabelen “streng” t være mutable. Vi oppretter deretter en mutbar referanse ved hjelp av & mut -strengen i funksjonssamtalen. Merk at funksjonsparameteren godtar en mutbar referanse, slik at funksjonen kan endre den lånte verdien.

Merk: Som nevnt kan du bare ha en mutbar referanse på et bestemt tidspunkt. Forsøk på å opprette mer enn en mutbar referanse vil kaste en feil som vist:

fn main ()
La Mut String = String :: fra ("Hello");
La streng2 = & mutstreng;
La streng3 = & mutstreng;
Println!(" ", String2, String3);

fn endring_value (streng: & mut streng)
streng.Push_str ("World!")

Koden over skal returnere en feil som vist:

Denne funksjonen kan bidra til å forhindre raseforhold når du låner og refererer til verdier.

Konklusjon

Denne artikkelen gir en grunnleggende forståelse av å bruke og jobbe med rustlån og referanse funksjoner. Du kan sjekke dokumentene for å utforske videre.