Generics “与”的区别是什么;“特征函数的一般参数”;及;trait“的通用参数;?
特征函数的Generics “与”的区别是什么;“特征函数的一般参数”;及;trait“的通用参数;?,generics,rust,Generics,Rust,特征函数的通用参数的一个简单示例: trait Ext:大小{ fn然后(self,f:fn(self)->R)->R{ f(自我) } } T{}的impl Ext trait的通用参数的一个简单示例: trait Ext:大小{ fn然后(self,f:fn(self)->R)->R{ f(自我) } } T{}的impl Ext 这两者有什么区别 什么时候应该使用“特征函数的通用参数”以及什么时候应该使用“特征的通用参数”?如果在特征上使用通用参数,那么相同的值必须应用于特征实现中的所
通用参数的一个简单示例
:
trait Ext:大小{
fn然后(self,f:fn(self)->R)->R{
f(自我)
}
}
T{}的impl Ext
trait的通用参数的一个简单示例
:
trait Ext:大小{
fn然后(self,f:fn(self)->R)->R{
f(自我)
}
}
T{}的impl Ext
这两者有什么区别
什么时候应该使用“特征函数的通用参数”以及什么时候应该使用“特征的通用参数”?如果在特征上使用通用参数,那么相同的值必须应用于特征实现中的所有函数,而不是仅应用于每个函数,但在引用trait时,还必须指定参数 这样做的一个优点是,您可以为trait参数的特定值实现trait,其中每个实现都是独立的:
impl Ext<String> for Something { }
impl Ext<u32> for Something { }
impl Ext for Something{}
某事物的impl Ext{}
也可以基于特征参数限制类型。例如,对于Mul特征:
pub trait Mul<Rhs = Self> {
type Output;
pub fn mul(self, rhs: Rhs) -> Self::Output;
}
pub-trait-Mul{
类型输出;
pub fn mul(self,rhs:rhs)->self::Output;
}
特定类型的实现将确定Self的类型,它必须指定Self::Output(它不必与type相同)。这里的特征参数是确保
rhs
的类型与Self的类型相同。简而言之,特征参数适用于整个特征,而函数参数仅适用于该函数