Types “实施特质”;不是";递归地
我有一个structTypes “实施特质”;不是";递归地,types,rust,operator-overloading,traits,Types,Rust,Operator Overloading,Traits,我有一个struct耦合和一个类型参数 我想在这对夫妇上实现一个操作(在本例中不是): 如果TimplementNot,则该对的否定就是否定的对 使用std::ops::Not; 结构耦合(T,T); 不适合夫妻 哪里 T:不是, { 类型输出=自身; fn非(自我)->自我{ 耦合(T::not(self.0),T::not(self.1)) } } 此代码使用其他特性(例如Default::Default)编译,但不使用traitnot 我得到了错误 错误[E0308]:类型不匹配 -->
耦合
和一个类型参数
我想在这对夫妇上实现一个操作(在本例中不是):
如果T
implementNot
,则该对的否定就是否定的对
使用std::ops::Not;
结构耦合(T,T);
不适合夫妻
哪里
T:不是,
{
类型输出=自身;
fn非(自我)->自我{
耦合(T::not(self.0),T::not(self.1))
}
}
此代码使用其他特性(例如Default::Default)编译,但不使用traitnot
我得到了错误
错误[E0308]:类型不匹配
-->src/lib.rs:12:16
|
5 |不适用于夫妇
|-此类型参数
...
12 |对(T::not(self.0),T::not(self.1))
|^^^^^^^^^^^^^^^^应为类型参数“T”,找到了关联的类型
|
=注意:应为类型参数`T`
找到关联的类型“::输出`
帮助:考虑进一步限制这个界限
|
7 | T:不+不,
| ^^^^^^^^^^^^^^^^^
为什么会这样?如何实现Not
和Couple
的其他操作特性?实现并不意味着它必然返回T
。因此,您必须指定类型,例如执行Not
使用std::ops::Not;
结构耦合(T,T);
不适合夫妻
哪里
T:不是,
{
类型输出=自身;
fn非(自我)->自我{
耦合(T::not(self.0),T::not(self.1))
}
}
或者,如果希望基于::Output
允许不同的输出类型,则可以改为:
impl不适用于夫妇
哪里
T:不是,
{
类型输出=耦合;
fn非(自)->自::输出{
耦合(T::not(self.0),T::not(self.1))
}
}
当然,您也可以将Couple(T::not(self.0),T::not(self.1))
简化为Couple(!self.0,!self.1)
@rambi注意,这是一个真正的区别,特别是第二个版本为例如Couple
实现了而第一个版本没有。