私は1つの非常に基本的なimplementatioを有向グラフ構造のための形質を作成し、提供しようとしていますが、コンパイルエラーに実行しています「期待されるタイプのパラメータは、構造体を発見しました」 :実装トレイト
error[E0308]: mismatched types
--> digraph.rs:21:16
|
21 | return std::ops::Range { start: 0, end: self.nodes.len() };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected type parameter, found struct `std::ops::Range`
|
= note: expected type `T`
= note: found type `std::ops::Range<usize>`
error[E0308]: mismatched types
--> digraph.rs:24:16
|
24 | return self.nodes[node].pre.iter();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected type parameter, found struct `std::slice::Iter`
|
= note: expected type `T`
= note: found type `std::slice::Iter<'_, usize>`
error[E0308]: mismatched types
--> digraph.rs:27:16
|
27 | return self.nodes[node].succ.iter();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected type parameter, found struct `std::slice::Iter`
|
= note: expected type `T`
= note: found type `std::slice::Iter<'_, usize>`
エラーメッセージは多少混乱します。なぜ型パラメータが戻り値として期待されるのですか?これは誤解を招くエラーメッセージが表示された場合の型の不一致(生存期間など)ですか?
おかげで、良い説明:あなたはがそうのように、特性に関連するタイプである必要何
。しかし、あなたのケースでは、ノードは、それがノードについての仮定を行うことができないので、二重字に動作する任意の機能は多くを行うことができるようにするつもりはないことを意味何でも、することができます。だから、私がしたいのは、NをイテレータにするようにNodesを制限することです(私の例ではusizeですが、呼び出し元によって定義されます)。 SimpleDiGraphは常に範囲オブジェクトを返すようにするために、私は幸せなんだけど、他の構造体は、有向グラフがNの上にそれを達成するための任意の方法を他のイテレータを返すことができるはず実装しますか? –
は、私はそれを考え出したと考えて、あなたが実際にそのよう _typeののNodeIteratorとして形質種類を、制限することができますように見える:イテレータの- ; _ トリックを行うべきです。今、生涯の問題を理解するだけです。 –