2013-05-26 17 views
7

Tôi đang cố gắng thực hiện một tính năng giống như Monad trong Rust. Chủ yếu chỉ để cho vui và làm quen với hệ thống kiểu. Tôi khá chắc chắn rằng tôi sẽ không thể thực hiện đầy đủ tính trạng Monad do thiếu "loại cao cấp" như được giải thích trong số reddit discussion này, nhưng tôi muốn xem tôi có thể nhận được bao nhiêu. Đối với một số lý do tôi không thể lấy mã này để biên dịch. Có vẻ như nó nên. Ai đó có thể giải thích lý do tại sao? Cảm ơn.Một bài tập về phương pháp chống gỉ khác

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

câu hỏi này có thể được cải thiện nếu bạn thêm các thông báo lỗi chính xác nó đã cho bạn (nó giúp những người khác tìm thấy nó) :) – OMGtechy

+0

Bạn nói đúng, thời gian tới .... Tôi havent sử dụng gỉ nhiều trong vài năm qua, tôi sẽ không biết bắt đầu từ đâu bây giờ. – MFlamer

Trả lời

7

Phương pháp tĩnh được xác định trong đặc điểm phải được gọi qua nó. Vì vậy, bạn phải:

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

Rõ ràng: - |. Cảm ơn. – MFlamer

Các vấn đề liên quan