2013-05-26 23 views
7

Próbuję wprowadzić podobną do Monady cechę w Rust. Głównie tylko dla zabawy i zapoznania się z systemem typów. Jestem prawie pewien, że nie będę w stanie w pełni wdrożyć cechy Monady z powodu braku "wyższych rodzajów", jak wyjaśniono w tym reddit discussion, ale chcę zobaczyć, jak blisko mogę się dostać. Z jakiegoś powodu nie mogę skompilować tego kodu. Wydaje się, że powinno. Czy ktoś może wyjaśnić, dlaczego? Dzięki.Kolejne ćwiczenie generycznego rdzy

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

kwestia ta mogłaby być lepsza jeśli dodano dokładny komunikat o błędzie, że dał ci (pomaga inni ludzie go znaleźć) :) – OMGtechy

+0

Masz rację, ja następnym razem .... W ciągu ostatnich kilku lat nie użyłem rdzy, nie wiedziałbym, od czego zacząć. – MFlamer

Odpowiedz

7

Statyczne metody zdefiniowane w funkcji muszą być przez nią wywoływane. Tak, trzeba:

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

Oczywiście: - |. Dzięki. – MFlamer