Articles of moho

¿Cómo se diferencia la syntax de un límite de por vida normal?

Considera el siguiente código: trait Trait {} fn foo(_b: Box<Trait>) {} fn bar(_b: Box<for Trait>) {} Ambas funciones, foo y bar parecen aceptar un Box<Trait> , aunque foo hace de forma más concisa que bar . ¿Cuál es la diferencia entre ellos? Además, ¿en qué situaciones necesitaría for syntax for como la anterior? Sé que […]

Implementando un rasgo para múltiples tipos a la vez

Tengo dos estructuras y un rasgo: struct A { x: u32, } struct B { x: u32, } trait T { fn double(&self) -> u32; } Me gustaría implementar T para ambas estructuras usando x . ¿Hay alguna manera de escribir algo así como impl T for A, B { fn double(&self) -> u32 { […]

¿Cuándo debería implementar std :: convert :: From vs std :: convert :: Into?

Veo que std::convert::Into tiene una implementación para cualquier cosa que implemente std::convert::From : impl Into for T where U: From Hay implementaciones mucho más específicas de From , mientras que Into actualmente solo tiene 3 implementaciones específicas, lo que hace que parezca que es la decisión prevaleciente implementar From forma predeterminada. Estoy seguro de que […]

¿Cómo hacer una búsqueda binaria en un Vec de carrozas?

Si tiene un Vec usaría el método slice::binary_search . Por razones que no entiendo, f32 y f32 no implementan Ord . Como los tipos primitivos provienen de la biblioteca estándar, no puede implementar Ord en ellos, por lo que no parece que pueda usar este método. ¿Cómo puedes hacer esto de manera efectiva? ¿Realmente tengo […]

println! error: se espera que un argumento literal / formato debe ser una cadena literal

Este progtwig extremadamente simple de Rust: fn main() { let c = “hello”; println!(c); } arroja el siguiente error de tiempo de comstackción: error: expected a literal –> src/main.rs:3:14 | 3 | println!(c); | ^ En versiones anteriores de Rust, el error decía: error: format argument must be a string literal. println!(c); ^ Reemplazar el […]

¿Cuál es la forma de facto de leer y escribir archivos en Rust 1.x?

Con Rust siendo comparativamente nuevo, he visto demasiadas formas de leer y escribir archivos. Muchos son fragmentos extremadamente desordenados que alguien ideó para su blog, y el 99% de los ejemplos que he encontrado (incluso en Stack Overflow) provienen de versiones inestables que ya no funcionan. Ahora que Rust está estable, ¿qué es un fragmento […]

¿Cómo detengo la iteración y devuelvo un error cuando Iterator :: map devuelve un Result :: Err?

Tengo una función que devuelve un Result : fn find(id: &Id) -> Result { // … } Luego otro usándolo así: let parent_items: Vec = parent_ids.iter() .map(|id| find(id).unwrap()) .collect(); ¿Cómo manejo el caso de falla dentro de cualquiera de las iteraciones del map ? Sé que podría usar flat_map y en este caso los resultados […]

¿Es posible hacer que un tipo solo se mueva y no se pueda copiar?

Nota del editor : esta pregunta se formuló antes de que Rust 1.0 y algunas de las afirmaciones en la pregunta no sean necesariamente ciertas en Rust 1.0. Algunas respuestas se han actualizado para abordar ambas versiones. Tengo esta estructura struct Triplet { one: i32, two: i32, three: i32, } Si paso esto a una […]

¿Por qué este patrón de coincidencia es inalcanzable cuando se utilizan patrones no literales?

El siguiente código ( patio de recreo ) let max_column = 7; edge = match current_column { 0 => Edge::Left, max_column => Edge::Right, _ => Edge::NotAnEdge }; da como resultado el siguiente error: error[E0001]: unreachable pattern –> :10:9 | 10 | _ => Edge::NotAnEdge | ^ this is an unreachable pattern | note: this pattern […]

¿Cómo puedo cambiar un nuevo valor para un campo en una referencia mutable a una estructura?

Tengo una estructura con un campo: struct A { field: SomeType, } Dado un &mut A , ¿cómo puedo mover el valor del field e intercambiar un nuevo valor? fn foo(a: &mut A) { let mut my_local_var = a.field; a.field = SomeType::new(); // … // do things with my_local_var // some operations may modify the […]