Rust 如何将一个大小超性状添加到锈菌性状?

Rust 如何将一个大小超性状添加到锈菌性状?,rust,traits,Rust,Traits,在,它给出了core::num::bignum::FullOps的以下示例代码: pub trait FullOps { ... fn full_mul(self, other: Self, carry: Self) -> (Self /*carry*/, Self); ... } 然后它说: 这里函数full\u mul返回一个(Self,Self)元组,该元组仅为 当Self-类型为size-出于该原因和其他原因时,格式良好, 只有当Self是size时,这种

在,它给出了
core::num::bignum::FullOps的以下示例代码:

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

这里函数
full\u mul
返回一个
(Self,Self)
元组,该元组仅为 当
Self
-类型为
size
-出于该原因和其他原因时,格式良好, 只有当
Self
size
时,这种特质才有意义。这个问题的解决办法是什么 case和大多数其他方法是添加缺少的
size
supertrait


如何添加缺少的
size
supertrait?

很简单:将第一行更改为:

pub trait FullOps : Sized {

很简单:将第一行更改为:

pub trait FullOps : Sized {

一种“超级特质”实际上只是一种束缚

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

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;
}
“超级特质”其实只是一种束缚

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

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