typestar

Implementar Index en Rust

Index le da a tu tipo la sintaxis de corchetes, prestando lo que devuelve.

use std::ops::Index;

struct Grid {
    width: usize,
    cells: Vec<u8>,
}

impl Index<(usize, usize)> for Grid {
    type Output = u8;

    fn index(&self, (row, col): (usize, usize)) -> &u8 {
        &self.cells[row * self.width + col]
    }
}

impl Grid {
    fn get(&self, row: usize, col: usize) -> Option<&u8> {
        self.cells.get(row * self.width + col)
    }
}

fn main() {
    let grid = Grid { width: 3, cells: vec![1, 2, 3, 4, 5, 6] };
    println!("{}", grid[(1, 2)]);
    println!("{:?} {:?}", grid.get(0, 1), grid.get(9, 9));
}

Cómo funciona

  1. Index devuelve una referencia al tipo Output.
  2. Indexar hace panic por convención al salirse del rango.
  3. Ofrece al lado un get que devuelva Option.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
26
Caracteres a escribir
490
Tokens
191
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 109 segundos.

Escribe este fragmento

Paso 2 de 4 en Operadores y acceso; paso 13 de 19 en Traits y genéricos.

← Anterior Siguiente →