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