Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics “与”的区别是什么;“特征函数的一般参数”;及;trait“的通用参数;?_Generics_Rust - Fatal编程技术网

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

的类型相同。简而言之,特征参数适用于整个特征,而函数参数仅适用于该函数