私は、パラメータとして2つのイテレータをとり、参照によってアイテムを反復する関数を作成しようとしています。各Iterator
アイテムはPartialEq
を実装する必要があります。PartialEqに関するコンパイラエラーメッセージでRhsは何を参照していますか?
私の最初の試みだった:
fn compute<T: Iterator>(first: T, second: T, len: usize) -> usize
where
T::Item: std::cmp::PartialEq,
{
// ...
}
これはコンパイルが、(私の知る限り理解したように)繰り返し処理ではない参照ではなく値によって、コンパイラが反復移動文句を言います。
私の第二の試みだったような何か:コンパイラエラーが生じ
fn compute<'a, T>(first: T, second: T, len: usize) -> usize
where
T: Iterator<Item = &'a std::cmp::PartialEq>,
{
//...
}
:
error[E0393]: the type parameter `Rhs` must be explicitly specified
--> src/main.rs:3:28
|
3 | T: Iterator<Item = &'a std::cmp::PartialEq>,
| ^^^^^^^^^^^^^^^^^^^ missing reference to `Rhs`
|
= note: because of the default `Self` reference, type parameters must be specified on object types
何をRhs
(右側?)コンパイラは意味ここまでいいか?なぜ私はそれへの参照が必要ですか?有界参照をIterator
の関数に渡すにはどうすればよいですか?
すべてのイテレータに参照を返すことのできるアイテムはありません。私はあなたが最初の 'compute'とコンパイラエラーをどのように使っていたのかを示す必要があると思います。それがうまくいかない理由は明確ではありません。 – trentcl
'Item ='の後ろに 'PartialEq'を書くと、*型コンテキスト*になりますので、特性ではなく特性オブジェクトとして解釈されます。 – Rufflewind
あなたは略語について正しいです:バイナリ演算子について話すとき、LHSは左手側に、右手系は右手用に使用されます(私は識別子が好きではないので、一つの手紙で違います)。 –