Avatar ·

¿Qué son Some y None en Rust? Explica Option<T> para principiantes

¡Hola! Acabo de empezar a aprender Rust después de Python y JavaScript, y me encontré con una construcción que no entiendo. En código ajeno veo a menudo cosas como: ```rust fn find_user(id: u32) -> Option { if id == 42 { Some(String::from("Alice")) } else { None } } ``` No entiendo en absoluto qué son `Some` y `None`. ¿Por qué no puedo simplemente devolver un string o `null`? En Python habría escrito: ```python def find_user(id): if id == 42: return "Alice" else: return None ``` Y eso funcionaría. Pero en Rust tengo que escribir algo como `Option` y envolver el resultado en `Some`. Es más, intenté usar el resultado de esta función y obtuve un error de compilación. Aquí está mi código: ```rust let user = find_user(42); println!("User: {}", user); // ¡Error! ``` El compilador se queja de que `Option` no implementa el trait `Display`. ¿Cómo trabajo correctamente con esto? ¿Qué significan realmente `Some` y `None`? ¿Por qué Rust no puede hacerlo como...