另一个防锈仿制药练习

问题描述 投票:7回答:1

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

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);
}
rust
1个回答
7
投票

必须通过特征调用特征中定义的静态方法。因此,您将拥有:

let c: Context<int> = Monad::lift(5);
© www.soinside.com 2019 - 2024. All rights reserved.