2017-01-26 8 views
0
struct Tree<T> { 
    leaf: Vec<?> 
} 

fn main() { 
    let fuji = Tree { leaf: vec![1, 2, [[3, 4, 5], 6, [7, 8, 9]] }; 
} 

上記のコードを実行できるように、Vec<>に何を入れるべきかわかりません。別のベクターを含むベクターのタイプは何ですか?

+1

これは機能しません。多くの理由から、あなたの実際の割り当てはとにかくコンパイルされません。 'struct'を完全に削除して、ちょうどあなたがしようとしている(私はぎざぎざ?と思う?)ベクトルにしようとすると、コンパイラがタイプを推論するためにコンパイラを残してもそれが許されないことがわかります。例えば、 'let fuji = vec![1、2、[[3、4、5]、6、[7、8、9]]]。 RustとVectorが特にRustでできることをより深く理解するために、[Rust Bookを通してあなたのやり方を提案する](https://doc.rust-lang.org/stable/book/)を提案します。 –

+0

上記の私のコメントに加えて:木のような構造は、Rustでbuild__簡単なものではありません。あなたがRustの一般的な構文/使用に不快なら、私は間違いなくノード間の関係に大きく依存するどんな種類のツリー構造も実装しようとすることに反対するでしょう。所有権、参考文献、そしてRustで安全でないコードを使用する方法についての確固たる理解が得られるまで、少なくとも。 –

+0

@Sあなたの助言に感謝します。私はPythonの方法でRustを書いているようです... –

答えて

2

ルストのVec torは、Vec<T>と書かれています。つまり、すべての要素はTでなければなりません。ベクタのベクトルが必要な場合は可能ですが、Vec<Vec<T>>です(すべての要素は現在Vec<T>です)。

あなたが書いたあなたのコードで

(3)配列は整数 の固定長(3)アレイからなる整数を含むベクトルを作成しようと、固定長である
vec![1, 2, [[3, 4, 5], 6, [7, 8, 9]] 

を整数。すごい!これは、Vecデータ型で要求される均質性とはまったく異なります。

あなたは、このようなベクトルのベクトルを作成することができます。

let v: Vec<Vec<i32>> = vec![vec![1,2,3], vec![4,5], vec![6]]; 

タイプはその長さにバインドされていない(配列のはとは違って)、これは、順番にVec TORSの有効Vec TORであるベクトルのので、は、整数(i32)のみを含むため有効です。

The Rust Bookは、基本的なRustの知識のための最良の情報源です。

関連する問題