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
Indexdevuelve una referencia al tipoOutput.- Indexar hace panic por convención al salirse del rango.
- Ofrece al lado un
getque devuelvaOption.
Palabras clave y builtins usados aquí
OptionVecfnforimplletselfstructtypeu8useusize
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.
Paso 2 de 4 en Operadores y acceso; paso 13 de 19 en Traits y genéricos.