Lär dig programmera i Rust · Lektion

Closures

Anonyma funktioner

Lektion 3 av 413 steg

Closures är en gratis lektion i Lär dig programmera i Rust på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lär dig programmera i Rust, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lär dig programmera i Rust innehåller totalt 4 lektioner.

Vad är en closure?

En closure är en namnlös funktion som ni kan lagra i en variabel och anropa senare. Den skrivs med lodräta streck runt parametrarna.

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

Closure-syntax

Parametrarna placeras mellan |...|, följda av kroppen. För ett enda uttryck behövs inga klammerparenteser.

  • |x| x + 1 — en parameter.
  • |a, b| a + b — två parametrar.
fn main() {
    let multiply = |a, b| a * b;
    println!("{}", multiply(3, 5));
}

Closure över flera rader

Om kroppen innehåller mer än en sats omsluter ni den med klammerparenteser, precis som för en funktion.

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

Fånga omgivningen

Till skillnad från en vanlig funktion kan en closure fånga variabler från det omgivande scopet och använda dem inuti sig.

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

Typhärledning i closures

Closures härleder vanligtvis sina parameter- och returtyper utifrån hur de används, så typannoteringar är valfria.

Ni kan lägga till typer för tydlighet när det behövs.

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

Closures som argument

Många standardmetoder tar emot en closure. Till exempel tillämpar map en closure på varje 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 behåller endast de element för vilka closuren returnerar true.

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);
}

Lagra closures

Closures har unika anonyma typer, men ni kan lagra dem i en variabel och återanvända dem.

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

Closures jämfört med funktioner

Skillnader:

  • Funktioner kan inte fånga omgivande variabler, men det kan closures.
  • Closures är anonyma och ofta korta.
  • Closure-typer härleds vanligtvis.
fn main() {
    let base = 100;
    let bonus = |earned: i32| earned + base;
    println!("{}", bonus(25));
}

Returnera beräknade värden

Kombinera closures med iteratorer för att beräkna resultat i en ren och uttrycksfull pipeline.

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

Closures fångar genom referens

Som standard lånar en closure de fångade variablerna. Ni kan fortfarande läsa dem utanför efteråt (när de endast lånades).

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

Snabb kontroll

Kom ihåg en viktig egenskap hos closures.

Sammanfattning

Closures i Rust:

  • Anonyma funktioner som skrivs som |params| body.
  • Kan fånga variabler från sin omgivning.
  • Typer härleds vanligtvis.
  • Används ofta tillsammans med iteratormetoder som map och filter.
fn main() {
    let tax = 0.2;
    let with_tax = |price: f64| price * (1.0 + tax);
    println!("{}", with_tax(50.0));
}
Gratis att börja

Lär dig Rust med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
39
Lektioner
144

Vanliga frågor

Är lektionen ”Closures” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lär dig programmera i Rust, inklusive ”Closures”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lär dig programmera i Rust innehåller totalt 4 lektioner.

Vad lär jag mig i ”Closures”?

Anonyma funktioner Ni övar på Lär dig programmera i Rust med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lär dig programmera i Rust?

Du behöver inga förkunskaper. Utbildningen i Lär dig programmera i Rust på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Closures”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lär dig programmera i Rust-lektionen?

Ja. Varje Lär dig programmera i Rust-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Definiera funktioner
  2. Uttryck och satser
  3. Closures
  4. Fn, FnMut, FnOnce
← Tillbaka till Lär dig programmera i Rust