私はRustにはかなり新しく、一般的なバイナリツリーを実装しようとしました。 enumとimplのリファレンスとしてthis codeを使用しました。一般的なenumとimpl、useを使用できない
ここで、use List::*;
は以下の列挙型を参照しているようです。ここで
は私の木のために私のコードです:
use BinaryTree::*;
enum BinaryTree<T> {
Empty,
Node(Box<(T, BinaryTree<T>, BinaryTree<T>)>),
}
impl<T: Ord> BinaryTree<T> {
fn add(&mut self, value: T) {
match *self {
BinaryTree::Empty => {
*self = BinaryTree::Node(Box::new((value, BinaryTree::Empty, BinaryTree::Empty)))
}
BinaryTree::Node(ref mut node) => {
if value <= node.0 {
node.1.add(value);
} else {
node.2.add(value);
}
}
}
}
fn height(&self) -> i32 {
match *self {
BinaryTree::Empty => -1i32,
BinaryTree::Node(ref node) => 1i32 + maxi(node.1.height(), node.2.height()),
}
}
fn size(&self) -> i32 {
match *self {
BinaryTree::Empty => 0i32,
BinaryTree::Node(ref node) => 1i32 + node.1.size() + node.2.size(),
}
}
}
fn maxi(x: i32, y: i32) -> i32 {
if x > y {
x
} else {
y
}
}
その後、このエラーで貨物終了:
error: unresolved import `BinaryTree::*`. Maybe a missing `extern crate BinaryTree`? [E0432]
use BinaryTree::*;
^~~~~~~~~~
は、私がリンクされたリストの例で理解するものによると、rustcはそれを理解する必要がありますuse BinaryTree::*;
は以下で定義する列挙型です。これにより、BinaryTree::Empty
をEmpty
とBinaryTree::Node(...)
からNode(...)
に変更するのに役立ちます。
編集:main.rsで
私は図書館をdeveloppし、複数のファイルを使用したいので、私はSRC/trees.rsで働く
、私は(今のところ)だけ持って
mod trees;
fn main() {}
コード提示さ(https://play.rust-lang.org/?gist=2231a51461b58d0c6cea11aa9166db08&version=stable&backtrace=0)[正常にコンパイル]、及びEmpty' 'にすべての' BinaryTree :: Empty'を変えるも機能。問題の内容を明確にすることはできますか? – Shepmaster
'maxi'は[標準ライブラリ](http://doc.rust-lang.org/std/cmp/fn.max.html)に組み込まれた関数です – Shepmaster
あなたのコードはおそらくルートにはありませんが、モジュールで?この場合、これは[this](http://stackoverflow.com/q/33948293/155423)、[this](http://stackoverflow.com/q/31035491/155423)または[this] (http://stackoverflow.com/q/26224947/155423)? – Shepmaster