2013-05-26 17 views
7

Sto cercando di implementare un tratto Monad come Rust. Principalmente solo per divertimento e per familiarizzare con il sistema dei tipi. Sono abbastanza sicuro che non sarò in grado di implementare completamente un tratto Monad a causa della mancanza di "tipi superiori" come spiegato in questo reddit discussion, ma voglio vedere quanto vicino posso ottenere. Per qualche motivo non riesco a compilare questo codice. Sembra che dovrebbe. Qualcuno può spiegare perché? Grazie.Un altro esercizio sui generici di ruggine

trait Monad<T> { 
    fn lift(val: T) -> Self; 
} 

struct Context<T>{ 
    val: T 
} 

impl<T> Monad<T> for Context<T> { 
    fn lift(x: T) -> Context<T> { 
     Context{val: x} 
    } 
} 

fn main() { 
    let c:Context<int> = Context<int>::lift(5i); 
} 
+0

questa domanda potrebbe essere migliorata se si è aggiunto il messaggio di errore esatto che ti ha dato (che aiuta altre persone lo trovano) :) – OMGtechy

+0

Hai ragione, la prossima volta .... io non ho usato molto la ruggine negli ultimi anni, non saprei da dove cominciare ora. – MFlamer

risposta

7

I metodi statici definiti in un tratto devono essere richiamati attraverso di esso. Quindi, si avrebbe:

let c: Context<int> = Monad::lift(5); 
+0

Ovviamente: - |. Grazie. – MFlamer

Problemi correlati