7

我正在尝试在 Rust 中实现类似 Monad 的特性。主要是为了好玩和熟悉类型系统。我很确定我将无法完全实现 Monad 特征,因为缺少“更高的种类”,正如reddit 讨论中所解释的那样,但我想看看我能做到多近。由于某种原因,我无法编译此代码。似乎应该如此。有人可以解释为什么吗?

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);
}
4

1 回答 1

7

必须通过 trait 调用定义在 trait 中的静态方法。所以,你有:

let c: Context<int> = Monad::lift(5);
于 2013-05-26T23:41:16.063 回答