1
このコード:構造体から関連する型を取得する方法はありますか?
use std::collections::HashMap;
struct MyNode;
struct MyEdge;
struct Graph<N, E> {
h: HashMap<N, Vec<E>>,
}
type MyGraph = Graph<MyNode, MyEdge>;
fn main() {
let x: MyGraph::N;//XXX
println!("Results:")
}
がエラーでコンパイルに失敗:
error[E0223]: ambiguous associated type
--> /home/xxx/.emacs.d/rust-playground/at-2017-07-26-164119/snippet.rs:21:12
|
21 | let x: MyGraph::N;
| ^^^^^^^^^^ ambiguous associated type
|
= note: specify the type using the syntax `<Graph<MyNode, MyEdge> as Trait>::N`
がGraph<MyNode, MyEdge>
からN
タイプを取得する方法はありますか?
私はそれが私がいないlet x: MyNode
なく、let x: expression with MyGraph as argument
を書くことができXXX
をマーク時点で、素晴らしいことだ 、ノードタイプの定義を複製しないようにエイリアス(type =
)を作成しました。
Th不必要に複雑に思われる。どうして 'let x:MyNode;'だけではないのですか?複数のノードタイプがありますか? – ljedrz
@ ljedrzええと、私のプログラムに 'let x:MyNode'がたくさんあるようなコードの重複を防ぐため、このグラフの' Node'型を変更すると、それらの場所をすべて修正する必要があります。 – user1244932