es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al implementar el rasgo para el tipo de función en Rust.

Quiero implementar el rasgo From para una enumeración.
Funciona bien para usize, pero falla para el tipo de función.

¿Hay alguna diferencia entre usize y el tipo de función?

El código:

type Foo = fn (usize) -> usize;

enum Value {
    Number(usize),
    Function(Foo),
}

impl From<usize> for Value {
    fn from(n: usize) -> Self {
        Value::Number(n)
    }
}
impl From<foo> for Value {
    fn from(f: Foo) -> Self {
        Value::Function(f)
    }
}

fn main() {
    let n: usize = 123;
    let vn: Value = n.into(); // OK para usize

    fn testf(n: usize) -> usize { n * n }
    let vf: Value = testf.into(); // falla para Foo
}

El error:

error[E0277]: la restricción de rasgo `Value: From<fn(usize) -=""> usize {testf}>` no se satisface
  --> t.rs:24:27
   |
24 |     let vf: Value = testf.into(); // falla para Foo
   |                           ^^^^ el rasgo `From<fn(usize) -=""> usize {testf}>` no está implementado para `Value`
   |
   = ayuda: se encontraron las siguientes implementaciones:
             `<value as=""></value><fn(usize) -=""> usize>>`
             `<value as=""></value><usize>>`
   = nota: se requiere debido a los requisitos en la implementación de `Into<value>` para `fn(usize) -> usize {testf}`

error: abortando debido a errores anteriores

Para obtener más información acerca de este error, inténtelo con `rustc --explain E0277`.

El error dice que se necesita From usize {testf}> pero solo se tiene From usize>. Creo que el problema es {testf}, pero no sé por qué.

Gracias de antemano.</fn(usize)></fn(usize)></fn(usize)>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no tengo mucho conocimiento sobre el lenguaje de programación Rust. Sin embargo, el error parece sugerir que el tipo de función Foo no está implementado correctamente para el rasgo From. El rasgo está satisfecho para el tipo usize, pero no para un tipo de función con el nombre testf. El mensaje de error menciona específicamente que la parte {testf} no está implementada. Es posible que haya algún error al declarar o implementar la función testf.

Comments are closed.