Borrowing a slice lets a helper read part of a collection without cloning the data.

Program

Play the program to choose how many numbers the helper reads from the borrowed slice.

limit
borrow_slice.rs
Replay: real traced execution (multi-file project)
fn main() {
    let limit = 3;
    let values = [3, 4, 5, 6];
    let total = sum_prefix(&values, limit);
    println!("sum={total}");
}

fn sum_prefix(values: &[i32], limit: usize) -> i32 {
    values[..limit].iter().sum()
}
fn main() {
    let limit = 2;
    let values = [3, 4, 5, 6];
    let total = sum_prefix(&values, limit);
    println!("sum={total}");
}

fn sum_prefix(values: &[i32], limit: usize) -> i32 {
    values[..limit].iter().sum()
}
fn main() {
    let limit = 4;
    let values = [3, 4, 5, 6];
    let total = sum_prefix(&values, limit);
    println!("sum={total}");
}

fn sum_prefix(values: &[i32], limit: usize) -> i32 {
    values[..limit].iter().sum()
}
  1. limit ← 3, values ← [3, 4, 5, 6]

    1fn main() {2    let limi→ 3t = 3; //@limit=3, 2, 43    let value→ [3, 4, 5, 6]s = [3, 4, 5, 6];4    let total = sum_prefix(&value[3, 4, 5, 6]s, limi3t);5    println!("sum={total}");
  2. fn sum_prefix(values: &[i32], limit: usize) -> i32

    8fn sum_prefix(values: &[i32], limit: usize) -> i32 {9    values[..limit[3, 4, 5]].iter().sum()10}
  3. total ← 12

    3    let values = [3, 4, 5, 6];4    let tota→ 12l = sum_prefix(&value[3, 4, 5, 6]s, limi3t);5    println!("sum={total}");6}
    outputsum=12
  1. limit ← 2, values ← [3, 4, 5, 6]

    1fn main() {2    let limi→ 2t = 2;3    let value→ [3, 4, 5, 6]s = [3, 4, 5, 6];4    let total = sum_prefix(&value[3, 4, 5, 6]s, limi2t);5    println!("sum={total}");
  2. fn sum_prefix(values: &[i32], limit: usize) -> i32

    8fn sum_prefix(values: &[i32], limit: usize) -> i32 {9    values[..limit[3, 4]].iter().sum()10}
  3. total ← 7

    3    let values = [3, 4, 5, 6];4    let tota→ 7l = sum_prefix(&value[3, 4, 5, 6]s, limi2t);5    println!("sum={total}");6}
    outputsum=7
  1. limit ← 4, values ← [3, 4, 5, 6]

    1fn main() {2    let limi→ 4t = 4;3    let value→ [3, 4, 5, 6]s = [3, 4, 5, 6];4    let total = sum_prefix(&value[3, 4, 5, 6]s, limi4t);5    println!("sum={total}");
  2. fn sum_prefix(values: &[i32], limit: usize) -> i32

    8fn sum_prefix(values: &[i32], limit: usize) -> i32 {9    values[..limit[3, 4, 5, 6]].iter().sum()10}
  3. total ← 18

    3    let values = [3, 4, 5, 6];4    let tota→ 18l = sum_prefix(&value[3, 4, 5, 6]s, limi4t);5    println!("sum={total}");6}
    outputsum=18
slice `&values[..limit]` borrows part of the array instead of allocating another collection.
iterator `iter().sum()` reads borrowed values and computes a result.
boundary The helper accepts any `&[i32]`, so callers can pass arrays, vectors, or slices.