Lær at programmere i Rust · Lektion

Closures

Anonyme funktioner

Lektion 3 af 413 trin

Closures er en gratis Lær at programmere i Rust-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær at programmere i Rust, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.

Hvad er en lukning?

En lukning er en anonym funktion, som du kan gemme i en variabel og kalde senere. Den skrives med lodrette streger omkring parametrene.

fn main() {
    let add_one = |x| x + 1;
    println!("{}", add_one(4));
}

Lukningssyntaks

Parametrene står mellem |...|, efterfulgt af kroppen. Hvis kroppen kun indeholder ét udtryk, er krøllede parenteser ikke nødvendige.

  • |x| x + 1 – én parameter.
  • |a, b| a + b – to parametre.
fn main() {
    let multiply = |a, b| a * b;
    println!("{}", multiply(3, 5));
}

Lukninger over flere linjer

Hvis kroppen indeholder mere end én sætning, skal du omslutte den med krøllede parenteser ligesom en funktion.

fn main() {
    let describe = |n: i32| {
        let doubled = n * 2;
        println!("{} doubled is {}", n, doubled);
    };
    describe(7);
}

Indfangning af omgivelserne

I modsætning til en almindelig funktion kan en closure indfange variabler fra det omgivende scope og bruge dem indeni.

fn main() {
    let factor = 10;
    let scale = |x| x * factor;
    println!("{}", scale(5));
}

Typ inferens i closures

Closures udleder normalt deres parameter- og returtyper ud fra, hvordan de bruges, så annoteringer er valgfri.

Du kan tilføje typer for tydelighedens skyld, når det er nødvendigt.

fn main() {
    let greet = |name: &str| -> String {
        format!("Hello, {}!", name)
    };
    println!("{}", greet("Rust"));
}

Closures som argumenter

Mange standardmetoder accepterer en closure. For eksempel anvender map en closure på hvert element.

fn main() {
    let nums = vec![1, 2, 3];
    let doubled: Vec<i32> = nums.iter().map(|x| x * 2).collect();
    println!("{:?}", doubled);
}

Filtrering med closures

Metoden filter beholder kun de elementer, som closuren returnerer true for.

fn main() {
    let nums = vec![1, 2, 3, 4, 5, 6];
    let evens: Vec<i32> = nums.into_iter().filter(|x| x % 2 == 0).collect();
    println!("{:?}", evens);
}

Lagring af closures

Closures har unikke anonyme typer, men du kan gemme dem i en variabel og genbruge dem.

fn main() {
    let is_even = |n: i32| n % 2 == 0;
    println!("{} {}", is_even(4), is_even(7));
}

Closures sammenlignet med funktioner

Forskelle:

  • Funktioner kan ikke indfange omgivende variabler; det kan closures.
  • Closures er anonyme og ofte korte.
  • Closure-typer udledes normalt.
fn main() {
    let base = 100;
    let bonus = |earned: i32| earned + base;
    println!("{}", bonus(25));
}

Returnering af beregnede værdier

Kombinér closures med iteratorer for at beregne resultater i en ren og udtryksfuld pipeline.

fn main() {
    let nums = vec![10, 20, 30];
    let total: i32 = nums.iter().map(|x| x + 1).sum();
    println!("total {}", total);
}

Closures indfanger ved reference

Som standard låner en closure de indfangede variabler. Du kan stadig læse dem bagefter uden for closuren, når de kun er lånt.

fn main() {
    let name = String::from("Ada");
    let printer = || println!("Name: {}", name);
    printer();
    println!("still usable: {}", name);
}

Hurtigt tjek

Genkald en vigtig egenskab ved closures.

Opsummering

Closures i Rust:

  • Anonyme funktioner skrevet som |params| body.
  • Kan indfange variabler fra deres miljø.
  • Typer udledes normalt.
  • Bruges meget sammen med iteratormetoder som map og filter.
fn main() {
    let tax = 0.2;
    let with_tax = |price: f64| price * (1.0 + tax);
    println!("{}", with_tax(50.0));
}
Gratis at komme i gang

Lær Rust med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “Closures” gratis?

Ja — alle 3 lektioner i læringssporet Lær at programmere i Rust, inklusive “Closures”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Closures”?

Anonyme funktioner Du øver dig i Lær at programmere i Rust med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lær at programmere i Rust?

Der kræves ingen tidligere erfaring. Lær at programmere i Rust på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Closures”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lær at programmere i Rust-lektion?

Ja. Alle Lær at programmere i Rust-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Definition af funktioner
  2. Udtryk og sætninger
  3. Closures
  4. Fn, FnMut, FnOnce
← Tilbage til Lær at programmere i Rust