如何将大小的supertrait添加到Rust特征?

时间:2016-11-01 10:44:28

标签: rust traits

this issue page for Rust,它为core::num::bignum::FullOps提供了以下示例代码:

pub trait FullOps {
    ...
    fn full_mul(self, other: Self, carry: Self) -> (Self /*carry*/, Self);
    ...
}

然后它说:

  

这里函数full_mul只返回一个(Self, Self)元组   当Self - 类型为Sized时格式良好 - 由于这个原因和其他原因,   只有当SelfSized时,这种特质才有意义。这个解决方案   案例和大多数其他案例是添加缺少的Sized supertrait。

如何添加缺少的Sized超级链接?

2 个答案:

答案 0 :(得分:4)

“超级特质”只是一个限制,真的。

您可以在特征级别或方法级别放置绑定。在这里,建议您将其置于特质级别:

pub trait FullOps: Sized {
    fn full_mul(self, other: Self, carry: Self) -> (Self, Self);
}

另一种解决方案是将其置于方法级别:

pub trait FullOps {
    fn full_mul(self, other: Self, carry: Self) -> (Self, Self)
        where Self: Sized;
}

答案 1 :(得分:2)

这非常简单:将第一行更改为:

pub trait FullOps : Sized {

Playground link